我有一个交易表,其中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
首先,两个表都需要一个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是要返回视图的字段。
解决了。
它实际上不是一对一的关系,而是网站和交易以及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');
}
}