# Conditions on associated model on CakePHP 3.x query

**URL:** <https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411>\
**Category:** Need Help\
**Created:** [October 31, 2016, 12:28pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411 "2016-10-31T12:28:53Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![amran117](https://avatars.discourse-cdn.com/v4/letter/a/8baadc/32.png) [@amran117](https://discourse.cakephp.org/u/amran117)\
**Post date:** [October 31, 2016, 12:28pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/1 "2016-10-31T12:28:53Z")

</div>

My codes works perfectly and retrieves data but When I add more conditions on associated models it shows error.

```
  if ($property == 'apartment') {
            $result = $this->Buildings->find('all')
                ->contain([
                    'Dohss','BuildingPlotInfo.Plots','Apartments.Owners','Owners'
                ])
                ->where(['Dohss.id' => $dohs_id,'Buildings.is_apartment' => 1,'Buildings.status' => 1,'Apartments.Owners.status'=>1]);

            $data_ap = 1;
            $this->set('data_ap', $data_ap);
            $this->set('result', $this->paginate($result));
            $this->set('_serialize', ['result']);

        }

```

In my code last condition on where clause is **‘Apartments.Owners.status’** and Cake Shows Error for this condition

---

<div class="post-metadata">

**Author:** ![chief-cook](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/chief-cook/32/479_2.png) [@chief-cook](https://discourse.cakephp.org/u/chief-cook)\
**Post date:** [October 31, 2016, 8:12pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/2 "2016-10-31T20:12:22Z")

</div>

Hey! What kind of error do you get?

---

<div class="post-metadata">

**Author:** ![Graziel](https://avatars.discourse-cdn.com/v4/letter/g/71c47a/32.png) [@Graziel](https://discourse.cakephp.org/u/Graziel)\
**Post date:** [October 31, 2016, 10:09pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/3 "2016-10-31T22:09:13Z")

</div>

checkout this [http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#filtering-by-associated-data](http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#filtering-by-associated-data)

---

<div class="post-metadata">

**Author:** ![amran117](https://avatars.discourse-cdn.com/v4/letter/a/8baadc/32.png) [@amran117](https://discourse.cakephp.org/u/amran117)\
**Post date:** [November 1, 2016, 10:00am UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/4 "2016-11-01T10:00:41Z")

</div>

**Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘Apartments.Owners.status’ in ‘where clause’**

Cause In query this cloumn is not present but It has fetched all the data associated with that model and I’ve mentioned them inside contain.

**SELECT [Buildings.id](http://Buildings.id) AS `Buildings __id`, Buildings.dohs\_id AS `Buildings__ dohs_id`, Buildings.road\_number AS `Buildings __road_number`, Buildings.build\_type AS `Buildings__ build_type`, Buildings.title\_en AS `Buildings __title_en`, Buildings.title\_bn AS `Buildings__ title_bn`, Buildings.build\_site\_area AS `Buildings __build_site_area`, Buildings.build\_site\_north AS `Buildings__ build_site_north`, Buildings.build\_site\_south AS `Buildings __build_site_south`, Buildings.build\_site\_east AS `Buildings__ build_site_east`, Buildings.build\_site\_west AS `Buildings __build_site_west`, Buildings.build\_site\_road\_details AS `Buildings__ build_site_road_details`, Buildings.build\_site\_soil\_type AS `Buildings __build_site_soil_type`, Buildings.build\_purpose AS `Buildings__ build_purpose`, Buildings.roof\_type AS `Buildings __roof_type`, Buildings.estimate\_cost AS `Buildings__ estimate_cost`, Buildings.actual\_cost AS `Buildings __actual_cost`, Buildings.plan\_approve\_date AS `Buildings__ plan_approve_date`, Buildings.work\_start\_date AS `Buildings __work_start_date`, Buildings.work\_finish\_date AS `Buildings__ work_finish_date`, Buildings.floor\_number AS `Buildings __floor_number`, Buildings.building\_details AS `Buildings__ building_details`, Buildings.is\_apartment AS `Buildings __is_apartment`, Buildings.is\_house AS `Buildings__ is_house`, Buildings.is\_garage\_available AS `Buildings __is_garage_available`, Buildings.is\_legal\_info AS `Buildings__ is_legal_info`, Buildings.apartment\_number AS `Buildings __apartment_number`, Buildings.septic\_tank\_info AS `Buildings__ septic_tank_info`, Buildings.waste\_cleaning\_details AS `Buildings __waste_cleaning_details`, Buildings.build\_status AS `Buildings__ build_status`, Buildings.developer\_id AS `Buildings __developer_id`, Buildings.status AS `Buildings__ status`, Buildings.create\_time AS `Buildings __create_time`, Buildings.update\_time AS `Buildings__ update_time`, [Dohss.id](http://Dohss.id) AS `Dohss __id`, Dohss.title\_en AS `Dohss__ title_en`, Dohss.title\_bn AS `Dohss __title_bn`, Dohss.total\_area AS `Dohss__ total_area`, Dohss.total\_plot\_number AS `Dohss __total_plot_number`, Dohss.total\_building\_number AS `Dohss__ total_building_number`, Dohss.total\_house\_number AS `Dohss __total_house_number`, Dohss.total\_apartment\_number AS `Dohss__ total_apartment_number`, Dohss.total\_market\_number AS `Dohss __total_market_number`, Dohss.total\_shop\_number AS `Dohss__ total_shop_number`, Dohss.status AS `Dohss __status`, Dohss.map\_file AS `Dohss__ map_file`, Dohss.create\_time AS `Dohss __create_time`, Dohss.update\_time AS `Dohss__ update_time` FROM buildings Buildings INNER JOIN dohss Dohss ON [Dohss.id](http://Dohss.id) = (Buildings.dohs\_id) WHERE ([Dohss.id](http://Dohss.id) = :c0 AND Buildings.is\_apartment = :c1 AND Buildings.status = :c2 AND Apartments.Owners.status = :c3) LIMIT 100 OFFSET 0**

---

<div class="post-metadata">

**Author:** ![Diego](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/diego/32/296_2.png) [@Diego](https://discourse.cakephp.org/u/Diego)\
**Post date:** [November 1, 2016, 2:15pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/5 "2016-11-01T14:15:00Z")

</div>

Try this:

```
 if ($property == 'apartment') {
    $result = $this->Buildings->find('all')
        ->contain([
            'Dohss' => function ($q) use ($dohs_id) {
                return $q->where(['Dohss.id' => $dohs_id]);
            },
            'BuildingPlotInfo' => function ($q) {
                return $q->contain(['Plots']);
            },
            'Apartments' => function ($q) {
                return $q->contain([
                    'Owners' => function ($q) {
                        return $q->where(['Owners.status' => 1]);
                    },
                ]);
            },
            'Owners'
        ])
        ->where(['Buildings.is_apartment' => 1, 'Buildings.status' => 1]);

    $data_ap = 1;
    $this->set('data_ap', $data_ap);
    $this->set('result', $this->paginate($result));
    $this->set('_serialize', ['result']);

}
```

---

<div class="post-metadata">

**Author:** ![amran117](https://avatars.discourse-cdn.com/v4/letter/a/8baadc/32.png) [@amran117](https://discourse.cakephp.org/u/amran117)\
**Post date:** [November 2, 2016, 7:32am UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/6 "2016-11-02T07:32:05Z")

</div>

Thanks mate ! It worked.I wasn’t that much familiar with closure of CakePHP 3.x.

I appreciate your help!

---

<div class="post-metadata">

**Author:** ![calzone](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/calzone/32/305_2.png) [@calzone](https://discourse.cakephp.org/u/calzone)\
**Post date:** [November 2, 2016, 7:55pm UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/7 "2016-11-02T19:55:20Z")

</div>

```
   $this->MainEntities->find()
   	->contain(['AssocEntities'=>['conditions'=>['AssocEntities.field'=>'some value']]])
   	->where(['MainEntities'=>'some other value']);
```

---

<div class="post-metadata">

**Author:** ![dirk](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/dirk/32/2174_2.png) [@dirk](https://discourse.cakephp.org/u/dirk)\
**Post date:** [March 22, 2021, 8:04am UTC](https://discourse.cakephp.org/t/conditions-on-associated-model-on-cakephp-3-x-query/1411/8 "2021-03-22T08:04:38Z")

</div>

Thanks for this solution. It also works on cakephp 4.
