【问题标题】:Property [id] does not exist on this collection instance [duplicate]此集合实例上不存在属性 [id] [重复]
【发布时间】:2017-09-05 07:45:45
【问题描述】:

我正在尝试创建编辑页面,但此错误不断弹出 Whoops, looks like something went wrong. Property [id] does not exist on this collection instance. 到目前为止我做了什么
这是我的Route

Route::get('book/edit/{id}', 'BookController@edit')->name('admin.book.edit');
Route::PATCH('book/edit/{id}', 'BookController@update')->name('admin.book.edit');

这是我的控制器

$books = $this->bookModel
        ->join('author', 'author.id', '=', 'book.author_id')
        ->where('book.id', '=', $id)
        ->select('book.*', 'author.name_1 as authorname1')
        ->get();
    return view('backend.book.edit', compact('books', $books));

最后查看文件在表单部分有以下内容

{{ Form::model($books, ['route' => ['admin.book.edit', $books->id], 'class' => 'form-horizontal', 'role' => 'form', 'method' => 'PATCH']) }}
<!--form content-->
{{ Form::close() }}

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    我在使用 eloquent 关系时也有类似的错误, 问题是我使用的是return $this-&gt;hasMany(ClassName::class); 但是这种关系是一对一的,所以问题的解决方案是return $this-&gt;hasOne(ClassName::class);

    在上面的示例中,第一个代码段将返回对象数组,这些对象将分解链式 eloquent 代码中的 eloquent 关系流,例如 $firstChain-&gt;middleChain-&gt;requiredData

    这里如果middleChain 有arrayOfObjects 它会导致上面的错误说property doesn't exist

    在使用 eloquent 关系时要小心正确提及它所具有的关系类型

    【讨论】:

      【解决方案2】:

      正如上面提到的 Mayank 所说,您获得了一个集合,您需要遍历 FIELDS 以获得所需的正确字段。我在对我有用的语法中给出了相同的答案

      foreach ($books as $book) {
           $book_id = $book->id
      }
      

      【讨论】:

        【解决方案3】:

        错误在这里:

        $books->id
        

        当您使用get() 时,您会得到一个集合,而$books 是一个集合。在这种情况下,您需要对其进行迭代以获取其属性:

        @foreach ($books as $book)
            {{ $book->id }}
        @endforeach
        

        【讨论】:

          【解决方案4】:

          我认为您的代码需要更新如下:

          $books = $this->bookModel
                 ->join('author', 'author.id', '=', 'book.author_id')
                 ->where('book.id', '=', $id)
                 ->select('book.*', 'author.name_1 as authorname1')
                 ->first();
             return view('backend.book.edit', compact('books'));
          

          希望这对你有用!

          【讨论】:

            【解决方案5】:

            您必须使用first() 检索一条记录,而不是使用get() 的集合,即:

            $book = $this->bookModel
                ->join('author', 'author.id', '=', 'book.author_id')
                ->where('book.id', '=', $id)
                ->select('book.*', 'author.name_1 as authorname1')
                ->first();
            

            请在其余代码中将$books 替换为$book

            【讨论】:

              猜你喜欢
              • 2023-03-12
              • 2018-04-12
              • 1970-01-01
              • 2019-06-21
              • 2019-09-13
              • 1970-01-01
              • 2018-04-01
              • 2021-11-14
              • 1970-01-01
              相关资源
              最近更新 更多