从hasMany关系中获取单个对象而不执行'()'关于laravel模型的关系

时间:2017-07-14 02:16:20

标签: laravel eloquent

class Document extends Model {
....
    public function files() { 
        return $this->hasMany(DocumentFile::class, 'document_id'); 
    }

    public function file()
    {
        return $this->files()->whereSome_condition('some')->first();
    }
....
}

这是我的文档模型。它有hasMany files关系。还有另一种关系' file'它通过第一关系' files'。

的某些条件返回单个对象过滤
dd($document->file());

返回该对象,但是,

dd($document->file); 

在HasAttributes.php第403行中给出" LogicException:关系方法必须返回一个类型为Illuminate \ Database \ Eloquent \ Relations \ Relation"的对象。异常。

有谁能告诉我为什么$ document->文件在这种情况下不起作用?什么可以解决我的问题。 我不想在我使用这种关系的任何地方写一套额外的()

先谢谢。

2 个答案:

答案 0 :(得分:0)

您不应该定义第二个关系,正如异常所说,关系方法必须返回Relation的对象。如果要检索相关模型的第一条记录,可以这样做:

dd($document->files->first());

答案 1 :(得分:0)

做到:

public function file() { 
        return $this->hasOne(DocumentFile::class, 'document_id')->whereSome_condition('some'); 
    }

它的工作方式是:

$document->file