我有一个基本应用程序,它将费用存储在包含以下列的表中:id
user_id
quote_id
(可为空)title
type
net
quote_id
列链接到myquotes
表;但是,表中也可以有不带quote_id
的条目。
我试图通过在我的模型上使用关系expenses()
来输出所有费用。
@foreach(Auth::user()->expenses as $e)
{{ $e->id }}
{{ $e->net }}
{{ $e->quote->title }}
{{ $e->quote_id }}
@endforeach
在我的
user
模型中,expenses
和expense
之间也有关系。public function quote()
{
return $this->hasMany('App\Quote', 'id','quote_id');
}
当表中总是有一个
quote
时,这是很好的,但是有些条目没有quote_id
并且我得到以下错误:未定义的属性:Illuminate\Database\Eloquent\Collection::$title
我该怎么解决?
最佳答案
据我所知(从你的数据库结构来看),每个expense
只有一个quote
不多。换句话说,业务的第一个顺序是将$expense->quote()
函数更改为:
public function quote()
{
return $this->hasOne('App\Quote', 'id', 'quote_id');
// Since your column naming is standard, this should work too:
// return $this->hasOne('App\Quote');
}
然后,由于
quote_id
可以是null
,您仍然需要检查expense
的quote()
是否是一个对象。类似这样的东西可以在您的刀片模板中使用:@if($e->quote)
{{ $e->quote->title }}
{{ $e->quote_id }}
@endif
如果您继续使用
hasMany()
而不是hasOne()
(无论出于什么原因),那么quote()
将返回一个array
对象,您可以循环通过该对象。@foreach($e->quote as $q)
{{ $q->title }}
@endforeach
关于php - Laravel关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38446541/