为什么在Laravel中使用WHERE之后要循环获取数据?

11 浏览
0 Comments

为什么在Laravel中使用WHERE之后要循环获取数据?

下面是我的控制器代码:

$topics = Topic::where('board_id', $id)->with('user')->get();
$topic = Topic::find($id);
$board = Boards::where('id', $id)->get();
return view('boards.show')->with('topics', $topics)->with('topic', $topic)->with('board', $board);

以下是生成URL的代码:

@foreach($board as $boards)
创建新帖子
没有找到帖子
@endforeach

但是如果我移除循环,就会出现错误:

在此集合实例上不存在属性[id]。

但是为什么我必须循环,如果只从boards表中获取一行数据?有没有不运行循环的解决办法?

0
0 Comments

在Laravel中,使用Boards::where('id', $id)->get();来获取单行数据时,可以使用Boards::find($id);Boards::findOrFail($id);代替。另外,使用return view('boards.show')->with('topics', $topics)->with('topic', $topic)->with('board', $board);来传递视图中的普通值是不好的做法,可以改为

return view('boards.show',[
   'topics'=> $topics,
   'topic'=> $topic,
   'board'=> $board
 ]);

。此外,在Laravel中,改变href="{{ route('routeName',['id' => $user->id]))}}"是最佳实践。

0
0 Comments

使用WHERE之后,循环获取数据的原因是因为使用了get()方法,从而获取到了一个集合。而实际上,由于只需要获取一个对象,所以不需要使用get()方法,而是可以使用find()方法来根据主键获取对象。在视图中,也不需要使用循环,只需要直接使用对象属性即可。

解决方法是使用find()方法来获取对象,而不是使用get()方法获取集合。同时,在视图中直接使用对象的属性即可,而不需要使用循环。

以下是代码示例:

$board = Boards::find($id);

Create New Post

另外,也可以使用first()或take(1)方法来获取第一个对象。

文章整理完毕。

0