반응형
여러 조건을 가진 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
는 문자열이 아닌 컬럼입니다.이게 가능하기나 해? 아니면 그 자리에서 고쳐야 해?
잘 부탁드립니다!
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();
문제를 해결하려면 다음 코드를 볼 수 있습니다.
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'));
});
//You may use this example. Might be help you...
$user = User::select("users.*","items.id as itemId","jobs.id as jobId")
->join("items","items.user_id","=","users.id")
->join("jobs",function($join){
$join->on("jobs.user_id","=","users.id")
->on("jobs.item_id","=","items.id");
})
->get();
print_r($user);
이는 둘 다 아래에 제시된 코드의 결합 조건이라고 생각되는 방식으로 수행되었기 때문입니다.
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();
조인 클로저 내에 where()로 추가하는 것만으로 여러 조건을 추가할 수 있습니다.
->leftJoin('table2 AS b', function($join){
$join->on('a.field1', '=', 'b.field2')
->where('b.field3', '=', true)
->where('b.field4', '=', '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;
도움이 되었으면 좋겠다;)
이것은 정치적으로 옳지 않지만 효과가 있다.
->leftJoin("players as p","n.item_id", "=", DB::raw("p.id_player and n.type='player'"))
언급URL : https://stackoverflow.com/questions/20731606/laravel-eloquent-inner-join-with-multiple-conditions
반응형
'itsource' 카테고리의 다른 글
JAVA_가 존재하는 이유는 무엇입니까?HOME 환경 변수? (0) | 2022.09.23 |
---|---|
__init__() 메서드를 사용한 Python super()에 대해 (0) | 2022.09.23 |
특정 날짜 이전의 레코드 삭제 (0) | 2022.09.23 |
v-for 루프에서 클릭한 항목에 대해서만 요소 가시성을 트리거하는 방법 (0) | 2022.09.21 |
휴지 상태 조건은 FetchType을 사용하여 여러 번 하위 항목을 반환합니다.열심 (0) | 2022.09.21 |