将子类belongsTo关系设置为特定值

时间:2017-06-17 02:49:35

标签: laravel laravel-5.4

这是我的架构:

Schema::create('agents', function (Blueprint $table) {
    $table->increments('id');
    $table->increments('name');
    $table->integer('agent_type_id')->nullable();
    $table->foreign('agent_type_id')->references('id')->on('agent_types');
    $table->timestamps();
});

Schema::create('agent_types', function (Blueprint $table) {
    $table->increments('id');
    $table->increments('title');
    $table->timestamps();
});

这是我的Agent模型:

class Agent extends Model
{

    public function agentType()
    {

        return $this->belongsTo('AgentType');

    }

}

一个特定的AgentType记录的标题为Artist。因此,我想创建一个扩展Artist的{​​{1}}模型,并将其Agent预设指向该特定记录。我将有一些不同类型的代理,所以我正在考虑将其作为其他代理类型的模式来实现。

所以有几个问题:

  • 这是好习惯吗?或者我应该远离这个想法?
  • 如何将子agentType()类中的agentType()方法设置为指向该类所有实例的特定记录?

1 个答案:

答案 0 :(得分:0)

我最终使用Eloquent的Accessor方法为后代类定义一个特定值:

class Artist extends Agent
{

    public function getAgentTypeAttribute()
    {

        AgentType::where('title', 'Artist')->first();

    }

}

超简单的解决方案!