【发布时间】:2018-12-11 15:32:01
【问题描述】:
有 3 个表:
users:身份证,姓名
compliments:身份证,姓名
users_compliments: id、compliment_id、user_id、complimentor_id
这是我的用户模型:
class User extends Model
public function sent_compliments() {
return
$this->belongsToMany(
'Compliment',
'users_compliments',
'complimentor_id',
'compliment_id'
)->withPivot('user_id');
}
如果我运行$user->sent_compliments()->get(),这是一个示例响应
Illuminate\Database\Eloquent\Collection {
all: [
Compliment {
id: 2,
name: "You are smart",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {
user_id: 6,
id: 99,
},
},
Compliment {
id: 52,
name: "You are funny",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {
user_id: 42,
id: 186,
},
},
],
}
但这是我想要的响应(它包括实际的用户模型,而不仅仅是数据透视表中的 user_id)
Illuminate\Database\Eloquent\Collection {
all: [
Compliment {
id: 2,
name: "You are smart",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {
user_id: 6,
id: 99,
},
user {
id: 6,
name: "John"
}
},
Compliment {
id: 52,
name: "You are funny",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {
user_id: 42,
id: 186,
},
user {
id: 42,
name: "Alex"
}
},
],
}
有没有办法通过雄辩的急切负载(例如使用 With:: 命令)而不是遍历数据透视表、收集 user_ids 并手动查询 User 表来获取这些数据?
【问题讨论】:
-
请显示
sent_nominations方法 -
sent_compliments方法发布在上面的问题中。它在User模型中。public function sent_compliments()@Alihosseinshahabi -
@Alihosseinshahabi 抱歉,我的问题有误。
sent_nominations不存在。应该是sent_compliments...我刚刚更新了问题,对于造成的混乱,我深表歉意
标签: php laravel eloquent eager-loading