【问题标题】:How to use an array from a query result and to then be used again for another query如何使用查询结果中的数组,然后再次用于另一个查询
【发布时间】:2015-08-13 18:51:08
【问题描述】:

场景是我有一个朋友,如果他知道他可以在另一个图书馆得到同样的书,他只会把他借来的书借给我。所以他做了以下查询:

$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){

}

问题是,是否有人知道以比上面更优雅的方式列出图书馆一和图书馆二中所有匹配书籍的方法。不知道一个人一开始有多少本书是个问题..提前谢谢

【问题讨论】:

  • 听起来像家庭作业?
  • 哈哈!不是我这样写的,这样更容易理解
  • 如果您将相同的 try/catch 重复 4 次放入函数中,您会更轻松。
  • 换句话说,您正试图获得一本同时出现在两个图书馆中并且属于特定用户的书?
  • 感谢@Wad Shuler 我是 php 新手,所以我会研究一下

标签: php laravel eloquent


【解决方案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 连接的信息。您将需要这些知识在您的职业生涯中向前发展。

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2016-04-06
    相关资源
    最近更新 更多