Существуют минимум 2 варианта одного и того же синтаксиса left Join для yii2
Рассмотрим построение в yii2 вот такого запроса :
1 |
SELECT `tezis`.* FROM `tezis` LEFT JOIN `category_item` ON `tezis`.`id` = `category_item`.`id_item` WHERE `id_category`='42' LIMIT 20 |
1. Вариант , ближе к sql запросам. category_item- это название таблицы . where — это по категории.
1 |
$query =Tezis::find()->leftJoin('category_item', 'category_item.id_item = tezis.id')->where(['id_category'=>$id_category]); |
2 второй вариант, с использованием, hasMany . categoryitems — геттер из модели.
1 |
$query =$query =Tezis::find()->joinWith('categoryitems')->where(['id_category'=>$id_category]); |
Вот сам геттер для реализации связи HasMany в модели Tezis.
1 2 3 4 5 |
public function getCategoryitems() { return $this->hasMany(CategoryItem::className(), ['id_item' => 'id']); } |
Не забываем, если надо указать All в конце для поиска.
Вот пример функии Search , в которую передаеём id категории и используем Join left
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public function search($params ,$id_category='') { //$query =Tezis::find()->with('categoryitems')->leftJoin('category_item', 'category_item.id_item = tezis.id'); if(!empty($id_category)){ // оба варианта равнозначны!!! //$query =Tezis::find()->leftJoin('category_item', 'category_item.id_item = tezis.id')->where(['id_category'=>$id_category]); $query =$query =Tezis::find()->joinWith('categoryitems')->where(['id_category'=>$id_category]); }else{ $query =Tezis::find(); } // всё что ниже не исправлялось. Как gii сгенерировало- так и оставили. // add conditions that should always apply here $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere([ 'id' => $this->id, 'status' => $this->status, ]); $query->andFilterWhere(['like', 'text_mini', $this->text_mini]) ->andFilterWhere(['like', 'text', $this->text]) ; return $dataProvider; } |
Цены
1500 р/чБолее подробно тут: https://ftask.ru/цены