【发布时间】:2014-04-20 09:26:00
【问题描述】:
Programs 有 Items 和 Uitems 表(可以有许多程序,许多程序可以有相同或不同的项目,而项目可以在不同的程序中)
数据透视表:有 items_id 和 items_type,其中 items_id 可以有来自任一 的“id”物品或物品
所以如果我要列出 Programs::find(1)->with('Items', 'uItems') where if items_type ===user use uitems else use items 我需要这样的东西!
我有程序表:
id user_id name description
1 2 x workouti High intensity
2 1 yn workouti low intensity
3 2 c workouti massive workout
4 2 b oldm abi sfsdf
我有一个如下图所示的数据透视表。
Programs 表与下面的 2 个表有关系
- 项目“核心”--> id |类别 ID |姓名 |说明
- Uitems“用户”--> id |用户 ID |姓名 |说明
如果您查看数据透视表,我有两个名为 items_id 和 items_type 的列,这两列代表项目和 uitems 表 SO;
if(items_type === 'user') then pull info from Uitems as well as;
if(items_type === 'core') then pull info from items.
我尝试的是;
Route::get('ws/{id?}', function($id)
{
$workouts = array('Monday'=>'', 'Tuesday'=>'', 'Wednesday'=>'', 'Thursday'=>'', 'Friday'=>'', 'Saturday'=>'', 'Sunday'=>'');
$days = Days::all()->lists("name", "id");
foreach($days as $dayKey => $day)
{
foreach($programs = Programs::find($id)->items()->wherePivot('days_id', $dayKey)->orderBy('sorts_id', 'ASC')->get() as $prokey => $program)
{
$program->settings = Settings::find($program->pivot->settings_id)->toArray();
if($program->pivot->items_type ==='core')
{
$program->items = Items::find($program->pivot->items_id)->toArray();
}else if ($program->pivot->items_type ==='user')
{
$program->items = Uitems::find($program->pivot->items_id)->toArray();
$program->by =User::find(Uitems::find($program->pivot->items_id)->user_id)->toArray();
}
$workouts[$day][] = $program->toArray();
}
}
$program = json_encode($workouts);
return $program;
});
但是这段代码导致了 39 次对 mysql 的查询尝试,这一点都不酷。 这正是我想要的表现不佳:
在哪里说:oguzhan Piskin 有来自 Uitems 的信息,而其他来自 Items 的信息
我需要使用 Eloquent 的 Eager 加载来完成此操作。还可以找到查询构建器,但我的首要任务是使用 Eloquent 进行急切加载。 任何帮助或线索都非常感谢!
程序模型:
class Programs extends Eloquent
{ 受保护的 $table = "程序";
public function items()
{
return $this->belongsToMany('Items')->withPivot('settings_id', 'days_id', 'sorts_id', 'id', 'items_type', 'items_id');
}
因为我使用程序来获取数据,所以我只使用项目来获取数据,但是当 uitems 数据加入数据透视表中的挑战时,我不能同时使用两者。
【问题讨论】:
标签: php laravel-4 eloquent eager-loading relation