Laravel:有一个雄辩的关系

问题描述 投票:0回答:2

我有一个交易表,其中hasOne网站和hasOne accounthead。但该网站不一定要求绑定任何交易,并且账户头也可以独立存在而不受任何交易的约束。

基本上,Site和AccountHead不一定是belongsTo交易。

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

我错过了我在Site和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
php laravel eloquent relationships
2个回答
0
投票

首先,两个表都需要一个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是要返回视图的字段。


0
投票

解决了。

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

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

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');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.