Php 索引页不显示db的对象,有时显示未定义的变量

Php 索引页不显示db的对象,有时显示未定义的变量,php,laravel,Php,Laravel,我试图建立一个购物车,但它没有显示购物车包含什么 控制器和刀片中的代码有问题: public function index() { $id = Auth::id(); $results = DB::table('carts') ->select('book_id') ->where('user_id', '=', $id)

我试图建立一个购物车,但它没有显示购物车包含什么

控制器和刀片中的代码有问题:

    public function index()
    {
        $id = Auth::id();

        $results = DB::table('carts')
                        ->select('book_id')
                        ->where('user_id', '=', $id)
                        ->get();

        $data = (array) $results;

        $books = Book::all()->whereIn('id', $data);

        return view('carts.index')->withBooks($books);
    }
@foreach($books作为$book)
{{$book->autori}
{{$book->titulli}
{{$book->cmimi}
@endforeach
或使用单个查询:

public function index()
{
     $books = Book::join('carts', static function($join) {
          $join->on('books.id', '=', 'carts.book_id')
               ->where('carts.user_id', '=', Auth::id());
     })->get();

     return view('carts.index')->withBooks($books);
}

您应该阅读并使用。

btw,而不是使用$data=(array)$results;您还可以执行$data=$results->toArray();对于您的问题,这不是正确的方法:$books=Book::all()->其中('id',$data);而是这样做:$books=Book::其中('id',$data)->get();我认为第一行可以简化为:
DB::table('carts')->where('user_id','=',Auth::id())->pull('book_id')
它将返回一个集合,并且
其中
接受集合,所以这很好。但无论如何,使用单个查询可能更好。
public function index()
{
     $booksIds = DB::table('carts')
         ->select('book_id')
         ->where('user_id','=', Auth::id())
         ->get()
         ->pluck('book_id')
         ->toArray();

     $books = Book::whereIn('id', $booksIds)->get();

     return view('carts.index')->withBooks($books);
}
public function index()
{
     $books = Book::join('carts', static function($join) {
          $join->on('books.id', '=', 'carts.book_id')
               ->where('carts.user_id', '=', Auth::id());
     })->get();

     return view('carts.index')->withBooks($books);
}