Laravel:有一个雄辩的关系

时间:2017-12-15 16:41:19

标签: php laravel eloquent relationships

我有一个交易表,hasOne 网站hasOne 帐户头。但网站并不一定需要绑定到任何交易,帐户头也可以独立,不受任何交易的约束。

基本上网站 AccountHead 不一定是belongsTo 交易

如何使用雄辩的关系来表示此场景。

我在网站 AccountHead 模型中遗漏了我需要做的任何事情吗?

这是我已经做过的事情:

我的交易模式:

    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

2 个答案:

答案 0 :(得分:0)

首先,两个表都需要transation_id字段来添加转换记录ID。这可以是nullable(),应该是unique(),以确保没有其他记录具有相同的transation_id

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

在您的视图中,您需要从关系中指定所需的数据。 E.g。

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

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

答案 1 :(得分:0)

<强>解决。

它实际上并不是一对一的关系,而是网站交易之间的hasMany关系以及 AccountHead 交易

我的新网站模型如下:

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');
    }
}