Intereting Posts

Laravel Красноречивое внутреннее соединение с несколькими условиями

У меня вопрос о внутренних соединениях с несколькими значениями. Я создал свой код, подобный этому, в laravel.

public function scopeShops($query) { return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); // $join->on('kg_shops.active', '=', "1"); // WRONG // EDITED ON 28-04-2014 $join->on('kg_shops.active', '=', DB::raw("1")); }); } 

Проблема только в том, что она дает такой результат:

 Column not found: 1054 Unknown column '1' in 'on clause' (SQL: select `kg_feeds`.* from `kg_feeds` inner join `kg_shops` on `kg_shops`.`id` = `kg_ feeds`.`shop_id` and `kg_shops`.`active` = `1`) (Bindings: array ( )) 

Как вы можете видеть, множественные условия в соединении идут хорошо, но он считает, что 1 является столбцом, а не строкой. Возможно ли это, или я должен исправить это в том месте.

Заранее спасибо!

Solutions Collecting From Web of "Laravel Красноречивое внутреннее соединение с несколькими условиями"

 return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); }) ->select('required column names') ->where('kg_shops.active', 1) ->get(); 

Поскольку вы сделали это таким образом, что он считает, что оба условия соединения в вашем коде приведены ниже:

 public function scopeShops($query) { return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); $join->on('kg_shops.active', '=', "1"); }); } 

Итак, вы должны удалить вторую строку:

 return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); }); 

Теперь вы должны добавить предложение where, и оно должно быть следующим:

 return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id')->where('kg_shops.active', 1); })->get(); 

Вы можете увидеть следующий код, чтобы решить проблему

 return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); $join->where('kg_shops.active','=', 1); }); 

Или другой способ его решить

  return $query->join('kg_shops', function($join) { $join->on('kg_shops.id', '=', 'kg_feeds.shop_id'); $join->on('kg_shops.active','=', DB::raw('1')); }); 

Больше с where in (list_of_items) :

  $linkIds = $user->links()->pluck('id')->toArray(); $tags = Tag::query() ->join('link_tag', function (JoinClause $join) use ($linkIds) { $joinClause = $join->on('tags.id', '=', 'link_tag.tag_id'); $joinClause->on('link_tag.link_id', 'in', $linkIds ?: [-1], 'and', true); }) ->groupBy('link_tag.tag_id') ->get(); return $tags; 

Надеюсь, что это полезно;)