同一张表上的多个关系

Posted

技术标签:

【中文标题】同一张表上的多个关系【英文标题】:Multiple relationships on same table 【发布时间】:2014-07-11 19:30:10 【问题描述】:

在我的属性模型中,我定义了这两个关系

public function images() 
    return $this->hasMany('Image')
        ->where('approved', '=', 1);

public function pending_images() 
    return $this->hasMany('Image')
        ->where('approved', '=', 0);

在我的控制器中,我创建了一个 Property 对象并尝试获取已批准和待处理的图像。

$images = $property->images;
$pending = $property->pending_images;

var_dump($images);
var_dump($pending);
exit;

$images 变量正如预期的那样是 Illuminate\Database\Eloquent\Collection

但是,$pending 只是 NULL

我尝试使用this answer 获取最后一个数据库查询,但似乎未执行的查询甚至没有被执行。 (最后一个查询运行有approved = 1,这是images 关系。)

我怀疑关系在同一张桌子上可能是个问题,但我被难住了。

【问题讨论】:

【参考方案1】:

您需要将该关系重命名为 camelCase:

public function pendingImages() 
   return $this->hasMany('Image')
     ->where('approved', '=', 0);

然后它将按预期工作,而且您可以通过任何一种方式访问​​它:

$property->pending_images == $property->pendingImages;

动态属性仅适用于 camelCased 方法,仅此而已。

【讨论】:

以上是关于同一张表上的多个关系的主要内容,如果未能解决你的问题,请参考以下文章

同一张表上的多个连接,在一个查询中计数

实体框架代码优先,同一张表上的多对多关系

TYPO3 版本中同一张表上的双向 n:m 关系。 4.7.2

在同一张表上定义关系 Laravel 5.3

同一张表上的多个事务,同时

同一张表上的多个连接:转换状态