我有一个发布模型,属于用户模型所代表的作者。这就是它们的定义方式:
class Publication extends \Illuminate\Database\Eloquent\Model {
public $incrementing = false;
public function author() {
return $this->belongsTo('App\Models\User');
}
}
我在表中使用了标准命名约定,因此在publication表中我有一个列{nammed user_id
。
class User extends \Illuminate\Database\Eloquent\Model {
const ROLES = ["Enseignant-Chercheur", "Doctorant"];
public $incrementing = false;
public function publications() {
return $this->hasMany('App\Models\Publication');
}
}
当我尝试检索我的数据时:
$publications = \App\Models\Publication::orderBy('created_at', 'desc')->take(10)->get();
die('<pre>'.var_export($publications[0], true).'</pre>');
relations数组为空...在数据库中,使用正确的用户ID正确填充行 如何解决这个问题?
答案 0 :(得分:3)
仅在明确访问时才加载关系,即:$publications[0]->author
或者,如果您希望可以eager load作者,并使用带有()的函数减少所需的查询:
\App\Models\Publication::with('author')->orderBy('created_at', 'desc')->take(10)->get();
答案 1 :(得分:2)
@Wizix如果您的外键与laravel机制不匹配,您可以尝试如下使用显式定义外键来检索关系数据。
//在出版物模型中定义关系如下
public function author() {
return $this->belongsTo('App\Models\User','user_id');
}
用户模型中的//定义如下
public function publications() {
return $this->hasMany('App\Models\Publication','user_id');
//user_id consider as foriegn key in publication model's table
}
然后您可以尝试使用“with”关键字使用eloquent访问关系数据,如下所示。
\App\Models\Publication::with('author')->orderBy('created_at', 'desc')->take(10)->get();