Laravel : hasOne Eloquent 关系

Laravel : hasOne Eloquent Relationships

我有一个交易table,其中hasOne网站hasOne帐户负责人。但是 site 不一定需要绑定任何交易, accounthead 也可以独立而不绑定任何 交易.

基本上 SiteAccountHead 不一定 belongsTo Transaction

如何使用 eloquent 关系表示此场景。

我的 SiteAccountHead 模型中是否遗漏了我需要做的任何事情?

这是我已经完成的:

我的交易模型:

    class Transaction extends Model
{
  public function site()
    {
        return $this->hasOne('App\Site');
    }
    public function accounthead()
    {
        return $this->hasOne('App\AccountHead');
    }
}

我的网站模型

    class Site extends Model
{
    protected $fillable = [
        'name',
        'slug',
        'location',
        'description'
    ];
}

我的 AccountHead 模型

class AccountHead extends Model
{
    protected $fillable = [
        'slug',
        'accountname'
        ];
}

我需要能够在我的视图中显示每笔交易的网站和帐户负责人。

在我看来:

 @forelse($transactions as $transaction)
     <td>{{str_limit($transaction->accounthead,47)}}</td>
     <td>{{str_limit($transaction->site,47)}}</td>
   @endforelse

首先,两个表都需要一个transation_id字段来添加交易记录id。这可以是 nullable() 并且应该是 unique() 以确保没有其他记录具有相同的 transation_id.

...
$table->integer('transation_id')->nullable()->unique();
...

在您看来,您需要从关系中指定您想要的数据。例如

<td>{{str_limit($transaction->accounthead->accountname,47)}}</td>
<td>{{str_limit($transaction->site->name,47)}}</td>

accountname/name 是您要返回到视图的字段。

已解决。

这实际上不是一对一的关系,而是 SiteTransaction 之间的 hasMany 关系以及 AccountHeadTransaction.

我的新站点模型如下所示:

class Site extends Model
{
    protected $fillable = [
        'name',
        'slug',
        'location',
        'description'
    ];

 public function transactions()
    {
        return $this->hasMany('App\Transaction','site_id');
    }
}

我的新 AccountHead 模型看起来像:

class AccountHead extends Model
{
    protected $fillable = [
        'slug',
        'accountname'
        ];

public function transactions()
    {
        return $this->hasMany('App\Transaction','accounthead_id');
    }
}

我的新交易模型如下所示:

    class Transaction extends Model
{
  public function site()
    {
      return $this->belongsTo('App\Site','id');
    }
    public function accounthead()
    {
      return $this->belongsTo('App\AccountHead','id');
    }
}