情节是我有一个朋友,如果他知道他可以在另一个图书馆拿到相同的书,他只会借给我借来的书。所以他做了以下查询:
$collectbook= LibraryOne::where('user_id', Auth::id())->get();
然后,他需要遍历数组以收集相关的ID,预测他有4本书,但他不确定。
if (isset($collectbook)) {
foreach ($collectbook as $books =>$values)
if($books==0){
$first_book = ($values->book_id);
}elseif ($books==1){
$second_book = ($values->book_id);
}elseif($books==2) {
$third_book = ($values->book_id);
}elseif($books==3) {
$fourth_book = ($values->book_id);
}
}
然后我运行四个单独的查询来检查他是否有匹配的书籍
try {
$collectbookone= LibraryTwo::where('user_id', Auth::id())
->where('item_id', $first_book)->first();
}catch(\Exception $e){
}
try {
$collectbooktwo= LibraryTwo::where('user_id', Auth::id())
->where('item_id', $second_book)->first();
}catch(\Exception $e){
}
try {
$collectbookthree= LibraryTwo::where('user_id', Auth::id())
->where('item_id', $third_book)->first();
}catch(\Exception $e){
}
try{
$collectbookfour= LibraryTwo::where('user_id', Auth::id())
->where('item_id', $fourth_book)->first();
}catch(\Exception $e){
}
问题是,是否有人知道如何以比上面更优雅的方式列出第一库和第二库中的所有匹配书籍。不知道一开始有多少本书就是问题。谢谢提前
答案 0 :(得分:1)
你应该使用sql连接。基于您正在使用laravel的功能。你有模型LibraryOne和LibraryTwo。假设LibraryOne的实际表名是libraryOne而LibraryTwo是libraryTwo,那么你的代码应如下所示:
DB::table('libraryOne')->where('libraryOne.user_id', Auth::id())->join('libraryTwo', function($join)
{
$join->on('libraryOne.book_id', '=', 'libraryTwo.item_id')->where('libraryTwo.user_id', Auth::id());
})
->get();
这将列出libraryOne和libraryTwo上的所有书籍。我只是好奇为什么libraryOne上的图书标识符是book_id而在libraryTwo上它是item_id。一条建议,学习读取有关sql连接的内容。你将需要在你的职业生涯中继续前进的知识。