【发布时间】:2015-08-02 06:48:58
【问题描述】:
我有一种复杂的数据模型,我正在尝试使用 Laravel 5/Eloquent 编写查询,而不仅仅是普通的 SQL。我下面的 SQL 可以工作,但我喝了 kool-aid,我想让它以“正确”的方式工作。
演员和姿势之间有一个many to many relationship,姿势和类别之间有一个many to many polymorphic relationship。
我想要做的是通过它的姿势获取与一个 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
数据库
演员 ID 名字
姿势 ID 名字
类别 ID 姓名 parent_id
可分类 类别ID 可分类的_id 可分类类型
代码
CategorizableTrait.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.com/… 并且不要错过 Joseph Silber 的 cmets - 在 L5.1 中,只有收集方法才有可能。
-
谢谢,我更新了我的答案,你的帖子效果很好!
标签: php mysql laravel eloquent laravel-5