gpt4 book ai didi

php - 我如何获得通过与 Laravel 5/Eloquent 的两个多对多关系关联的不同类别列表?

转载 作者:行者123 更新时间:2023-11-29 07:37:10 30 4
gpt4 key购买 nike

我有一个复杂的数据模型,我正在尝试使用 Laravel 5/Eloquent 编写查询,而不仅仅是普通的 SQL。我下面的 SQL 可以工作,但我喝了 kool-aid,我想让它以“正确”的方式工作。

有一个many to many relationship Actor 和姿势之间和 many to many polymorphic relationship姿势和类别之间。

我想做的是通过 Actor 的姿势获取与 Actor 相关的所有不同类别的列表。

SQL

    SELECT DISTINCT 
categories.name,
categories.parent_id
FROM
actor_pose
JOIN
poses ON poses.id = actor_pose.pose_id
JOIN
categorizables ON categorizables.categorizable_id = poses.id
JOIN
categories ON categories.id = categorizables.category_id
WHERE
actor_pose.actor_id = 1 AND
categorizables.categorizable_type = "App\\Pose"
ORDER BY
parent_id

数据库

Actor ID 姓名

姿势 ID 姓名

类别 ID 姓名 父ID

可分类 类别_id 可分类_id 可分类_类型

代码

CategorizedTrait.php

<?php namespace App;
trait CategorizableTrait {
public function categories()
{
return $this->morphToMany('App\Category', 'categorizable');
}
}

Pose.php

<?php namespace App;
class Pose extends Model
{
use CategorizableTrait;
public function actors()
{
return $this->belongsToMany('App\Actor')->withTimestamps();
}
}

Actor.php

<?php namespace App;    
class Actor extends Model
{
public function poses()
{
return $this->belongsToMany('App\Pose')->withTimestamps();
}

最佳答案

链接到SoftOnSofa来自Jarek Tkaczyk我最终使用了一个干净的解决方案。

我将此方法添加到我的 Actor.php 文件中。

Actor.php

public function getCategoriesAttribute()
{
$categories = new Collection;
$this->load(['poses.categories' => function ($q) use ( &$categories ) {
$categories = $q->get()->unique();
}]);
return $categories->sortBy('order')->sortBy('parent_id');
}

Controller 没有做任何特殊的事情。在 Blade 中,您可以按如下方式访问它。

index.blade.php

@foreach($actor->categories as $key => $category)
{{ $category->name }}
@endforeach

关于php - 我如何获得通过与 Laravel 5/Eloquent 的两个多对多关系关联的不同类别列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359555/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com