Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 4 使用hasManyThrough和Laravel 4.1快速加载_Laravel 4 - Fatal编程技术网

Laravel 4 使用hasManyThrough和Laravel 4.1快速加载

Laravel 4 使用hasManyThrough和Laravel 4.1快速加载,laravel-4,Laravel 4,我有以下表格结构 users user_id | email | name ================================== 1 | tom@example.org | Tom 2 | pete@example.org | Pete trainings training_id | user_id | title ================================================= 1

我有以下表格结构

users
user_id | email             | name
==================================
1       | tom@example.org   | Tom
2       | pete@example.org  | Pete

trainings
training_id | user_id   | title
=================================================
1           | 1         | First training of Tom
2           | 1         | Second training of Tom
3           | 2         | First training of Pete
4           | 2         | Second training of Pete

calendar
calendar_id | training_id   | when_date
=================================================
1           | 1             | 2014-08-01 10:00:00
2           | 1             | 2014-08-08 10:00:00
3           | 1             | 2014-08-15 10:00:00
4           | 2             | 2014-08-01 18:00:00
5           | 2             | 2014-08-03 18:00:00
6           | 2             | 2014-08-05 18:00:00
7           | 3             | 2014-08-12 16:30:00
8           | 4             | 2014-08-09 22:30:00
我为这个桌子结构准备了三个模型

class User extends Eloquent
{
    public function trainings()
    {
        return $this->hasMany('Training');
    }

    public function events()
    {
        return $this->hasManyThrough('Calendar', 'Training', 'user_id', 'training_id');
    }
}

class Training extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('User');
    }

    public function events()
    {
        return $this->hasMany('Calendar');
    }
}

class Calendar extends Eloquent {

    public function training()
    {
        return $this->belongsTo('Training');
    }

}
我想为所选用户(
user\u id=1
)获取最新的N个日历事件,按最接近的事件排序,并包含此日历事件的所有培训详细信息。当我执行以下操作时,急切的加载似乎不起作用

$events = User::with('events', 'trainings')->find($userId);

foreach ($events as $event) {
    echo $event->training->title; // runs a separate query to get the title of the training
}
如果给定用户有100多个事件,它将运行100多个查询


如何通过快速加载实现这一点?

您不应该先获取用户,然后通过该实例进行查询吗

$user = User::find(userId);
$events = $user->with('events', 'trainings');
或一次性:

User::find(userId)->with('events', 'trainings');

您可以通过使用惰性急切加载来实现这一点。就你而言:

$user = User::with('events')->find($userId);
$user->events->load('training');

foreach ($user->events as $event) {
    echo $event->training->title;
}

我对你发布的代码有点困惑。
$events
是否包含
用户的实例化?