访问模型中关联方法内的字段

时间:2019-08-06 17:55:02

标签: php eloquent relationship

我想访问关系表中的数据库字段。 (下面)显示的模型具有字段“ 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 确实提供了模型结构,但是其中没有数据。这有可能吗?

1 个答案:

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