我想访问关系表中的数据库字段。 (下面)显示的模型具有字段“ type_id ”。
// The query (so far):
$page = Page::where('slug', $slug)
->with(['page_content' => function ($query) {
return $query->with('content')
->orderBy('order')
->get();
}])
->first();
// Model / Relationship
public function content()
{
if ($this->type_id == 1) {
return $this->hasMany(TypeOne::class, 'id', 'content_id');
}
if ($this->type_id == 2) {
return $this->hasMany(TypeTwo::class, 'id', 'content_id');
}
}
$ this 确实提供了模型结构,但是其中没有数据。这有可能吗?
答案 0 :(得分:1)
您无法在模型中访问这些值。
关于多态sql,您可以阅读有关它的更多信息here
我建议您为每个表创建一个属性。
您的页面迁移
Schema::create('pages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('type_one_id');
$table->unsignedBigInteger('type_two_id');
/* ... */
$table->foreign('type_one_id')
->references('id')->on('type_one')
->onDelete('cascade');
$table->foreign('type_two_id')
->references('id')->on('type_two')
->onDelete('cascade');
});
您的App\Pages.php
模型
public function typeOneContents()
{
return $this->hasMany('App\TypeOne');
}
public function typeTwoContents()
{
return $this->hasMany('App\TypeTwos');
}
您的PagesController.php
$page = Page::where('slug', $slug)
->with(['page_content' => function ($query) {
return $query->with(['typeOneContents', 'typeTwoContents'])
->orderBy('order')
->get();
}])
->first();