使用Laravel Eloquent检索所有记录

3
我尝试遵循这里的文件,但没有得到期望的结果, 我的表格如下:

用户表

id (pk - int) | username,

推文表格

id (pk - int) | user_id (fk - int) | tweet(varchar)

用户模型
public function tweets() {
   return $this->hasMany('App\Tweet', 'user_id); // user_id is FK
}

推文模型

public function user() {
    return $this->belongsTo('App\User');
}

在控制器端,我使用eloquent来检索数据。我有这个方法,
public function ajax($id) {
    $data = User::with('tweets')->find($id)->tweets();
    return $data;
}

我尝试按照这里的逻辑进行操作,但是在控制器代码中出现了以下错误:

尝试获取非对象属性


1
执行 dd(User::with('tweets')->find($id))。这很可能会返回 null,因此出现了错误。您需要确保 $id 在用户表中存在。 - Luís Cruz
使用 with() 可以预加载推文。除非你明确想要获取关系,否则应该使用 find($id)->tweets 而不是 tweets()(注意没有括号)。前者获取数据,后者获取关系。 - Ben Swinburne
1
尝试使用$data = User::with('tweets')->find($id)->tweets;代替$data = User::with('tweets')->find($id)->tweets(); - The Alpha
2个回答

5

为什么不可以简单地这样做:

$User = User::find($id);
$tweets = Tweet::whereUserId($id)->get(); // or ->paginate(20);
return compact('User', 'tweets');

顺便提一句,我知道关于急切加载的内容,但是它执行了相同的操作,而且还要将 tweets 集合加入到 User 对象中,这是不必要的操作。


请简要解释一下如何使用 whereUserId() 方法? - Mohamed Kira
1
whereUserId($id) 和 where('user_id', $id) 是相同的,它是 PHP 中的魔术方法,当您编写 whereSomethinElse($var) 时,它会转换为 where('something_else', $var),这是 Eloquent 在使用的方法。 - num8er

3
尝试使用->get();来获取所有记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接