一个帖子属于一个作者,该作者就读一所学校。帖子可通过作者访问作者所在的学校。

简单的说:Thread 模型可以通过 Author 模型访问唯一的 School 模型。

表结构

threads: id, title
authors: id, name, thread_id
schools: id, name, author_id
// 一对一指的是:作者对学校

模型

# App\Thread
传递给 hasOneThrough 方法的第一个参数是希望访问的模型名称,第二个参数是中间模型的名称。

当执行关联查询时,通常会使用 Eloquent 约定的外键名。如果你想要自定义关联的键,可以通过给 hasOneThrough 方法传递第三个和第四个参数实现,第三个参数表示中间模型的外键名,第四个参数表示最终模型的外键名。第五个参数表示本地键名,而第六个参数表示中间模型的本地键名:
public function authorSchool()
{
    return $this->hasOneThrough('App\School', 'App\Author');
}

# App\Thread
public function authorSchool()
{
    return $this->hasOneThrough(
        'App\School',
        'App\Author',
        'thread_id', // 作者表外键
        'author_id', // 学校表外键
        'id',        // 帖子本地键
        'id',        // 作者本地键
    );
}

使用

$school = \App\Thread::find(2)->authorSchool;
$threadsWithSchool = \App\Thread::with('authorSchool')->get();

标签: none

添加新评论