私は取得しようとしているクエリがあります。その旅行や場所の詳細と一緒にリスト情報を取得すると仮定します。LaravelのleftJoinクエリに参加
これは、イムは、先のコントローラ内のクエリを呼び出す方法です:
public function destinations($id) {
$destination = Destination::findOrFail($id);
$listingGuides = Listing::findGuidesTrips($destination)
->with('locations')
->withCount('trips')
->get();
return view('destinations.index', compact('listingGuides');
}
そしてfindGuidesTrips
方法が掲載モデルの内側にある:
public static function findGuidesTrips($destination) {
$query = self::query()
->leftJoin('trips', 'listing_id', '=', 'listings.id')
->addSelect(
\DB::raw('listings.name,listings.slug,listings.type,listings.id,MIN(trips.cost) as starting_price')
)
->groupBy('listings.id');
$query = self::query()
->leftJoin('locations', 'listing_id', '=', 'listings.id')
->addSelect(
\DB::raw('locations.longitude as longitude')
)->addSelect(
\DB::raw('locations.latitude as latitude')
);
$query = $query->whereHas('locations',function($query) use ($destination) {
$query->where('region', 'like', $destination->location)->orWhere('country', $destination->location);
});
return $query;
}
これは私が戻って得るものです:
私は2 $ query = self :: query()quiresを持っていますが、1つしか呼び出されていません(下のもの)。それはトップのself :: queryを無視します。
私は、これらの2つのleftJoinクエリを1つにまとめる方法を考えていましたか?または、このクエリを実行するより良い方法はありますか?
(私はこれをやってみました:)
$query = self::query()
->leftJoin('trips', 'listing_id', '=', 'listings.id')
->addSelect(
\DB::raw('listings.name,listings.slug,listings.type,listings.id,MIN(trips.cost) as starting_price')
)
->leftJoin('locations', 'listing_id', '=', 'listings.id')
->addSelect(
\DB::raw('locations.longitude as longitude')
)->addSelect(
\DB::raw('locations.latitude as latitude')
)->groupBy('listings.id');
しかし@Timルイスと@Nikleshで述べたように、それは私にIntegrity constraint violation: 1052 Column 'listing_id' in on clause is ambiguous
エラー
、ちょうどあなたが 'にテーブル名を指定することができることに注意してください - '、> leftJoin( '旅行' - 'のような> leftJoin()'関数、 '、' = '、' listing.id ') 'または' - > leftJoin(' locations '、' locations.listing_id '、' = '、listing.id');それはあなたのあいまいさの問題を取り除くでしょう。 –
最後のクエリの 'listing_id'の代わりに' trips.listing_id'を最初に、 'locations.listing_id'を2番目に試してみてください。 – C2486
@TimLewis素敵な仕事の男、それについて考えなかった。はい、私が欲しいものを正確に返します!ありがとうございました。 – David