Eloquent不会检索belongsTo关系

时间:2017-03-21 08:51:01

标签: php laravel eloquent

我有一个发布模型,属于用户模型所代表的作者。这就是它们的定义方式:

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正确填充行 如何解决这个问题?

2 个答案:

答案 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();