我有一个基本应用程序,它将费用存储在包含以下列的表中:
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模型中,expensesexpense之间也有关系。
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,您仍然需要检查expensequote()是否是一个对象。类似这样的东西可以在您的刀片模板中使用:
@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/

10-08 22:28