【问题标题】:get single object from a hasMany relation without doing '()' on relation in laravel model从 hasMany 关系中获取单个对象,而不对 laravel 模型中的关系执行“()”
【发布时间】:2017-12-19 00:00:10
【问题描述】:
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->file 在这种情况下不起作用?什么可以解决我的问题。 我不想在任何我使用这种关系的地方写额外的()

提前致谢。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      去做吧:

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

      它的工作原理:

      $document->file
      

      【讨论】:

        猜你喜欢
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2017-11-15
        相关资源
        最近更新 更多