相关疑难解决方法(0)

为什么Laravel/Eloquent不能使用JOIN进行预先加载?

<?php

class Cat extends Eloquent {

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

class User extends Eloquent {

    public function cats() {
        return $this->hasMany('Cat');
    }
}
Run Code Online (Sandbox Code Playgroud)

现在:

$cats = Cat::with('user')->get();
Run Code Online (Sandbox Code Playgroud)

执行2个查询:

select * from `cats`
select * from `users` where `users`.`id` in ('1', '2', 'x')
Run Code Online (Sandbox Code Playgroud)

为什么不能这样做:

select * from cats inner join users on cats.user_id = users.id
Run Code Online (Sandbox Code Playgroud)

对于那些说表中有两个id列的人来说,使用别名可以很容易地避免这种情况:

select 
    c.id as cats__id,
    c.name as cats__name,
    c.user_id as cats__user_id,
    b.id as users__id,
    b.name as users__name
from cats c
inner join …
Run Code Online (Sandbox Code Playgroud)

php join eager-loading eloquent laravel-4

22
推荐指数
1
解决办法
6526
查看次数

如何在laravel 4中同时使用Eager Loading和Join in Eloquent

楷模

class WPModel extends Eloquent
{

    protected $table = 'work_processes';
    protected $guarded = array('id');
    protected $softDelete = true;

    // declaring one-to-many relationship
    public function relatedWPAQs()
    {
        return $this->hasMany('WPAQModel', 'wp_id');
    }

    public function relatedUsers()
    {
        return $this->belongsTo('UserModel', 'wp_owner_id');
    }

}

class UserModel extends Eloquent 
{
    protected $table = 'users';
    protected $softDelete = true;

    public function relatedWPs()
    {
        return $this->hasMany('WPModel', 'wp_owner_id');
    }
}

class WPAQModel extends Eloquent
{
    protected $table = 'wp_audit_questions';
    protected $fillable = array('wp_id', 'wp_audit_question');

    // declaring one-to-many relationship - …
Run Code Online (Sandbox Code Playgroud)

inner-join eager-loading eloquent laravel-4

2
推荐指数
1
解决办法
2782
查看次数

标签 统计

eager-loading ×2

eloquent ×2

laravel-4 ×2

inner-join ×1

join ×1

php ×1