Laravel 4渴望加载关系问题

时间:2014-02-01 22:17:18

标签: php mysql laravel laravel-4 eloquent

我有两个表,项目和用户。用户可以拥有多个项目,一个项目可以由一个用户拥有。

我的两个表有很多字段但是通过以下方式链接:

Item
----
ownerID

User
----
id

这些是将两个表链接在一起的字段,它们在我的数据库中使用外键设置。

这是两个模型的缩短版本:

class Item extends Eloquent {
    public function owner()
    {   
        return $this->belongsTo('User','id');
    }
}

class User extends Eloquent implements UserInterface, RemindableInterface {
    public function items()
    {
        return $this->hasMany('Item', 'ownerID');
    }
}

所以,我希望得到我的所有物品并急切加载所有者。这是我的控制器中的代码:

class ItemsController extends BaseController {
    public function all(){
        $items = Item::with('owner')->get();
        return $items;
    }
}

(我正在返回$items,所以我可以调试输出)

但是,这就是我的输出:

[
    {
        "active":"1",
        "categoryID":"1",
        "created_at":"0000-00-00 00:00:00",
        "description":"Just a test item",
        "endDate":"2014-03-01 21:46:07",
        "id":"32",
        "name":"Test Item",
        "owner":null,
        "ownerID":"1",
        "section":"0",
        "updated_at":"0000-00-00 00:00:00"
    }
]

我不明白为什么老板是空的?用户ID 1存在于我的数据库中,为什么它为空?

2 个答案:

答案 0 :(得分:2)

根据您在Item

中的功能
public function owner()
{   
    return $this->belongsTo('User','id');
}

它表示foreign key表中的itemsid,用于与users表的关系,但您已使用ownerId作为foreign keyitems表中primary key users public function owner() { // This model (child) with a local-key/field ownerId // in it's corresponding table(items) belongs to/relates to the // user model (parent) with primary-key id in corresponding (users) table return $this->belongsTo('User','ownerID'); } 表。{/ p>

所以,它应该是

belongsTo/reverse

使用items时,传递给函数的第二个参数是当前表中的引用键(子键/本地键),此处ownerId是当前表,其中包含引用键local-key,因为它idusers表的{{1}}字段相关。

答案 1 :(得分:0)

试试这个

class Item extends Eloquent {
    public function owner()
    {   
        return $this->belongsTo('User','ownerID');
    }
}