如何在lalovel Eloquent中获取此信息

时间:2013-09-02 11:29:28

标签: database laravel eloquent laravel-3

对不起问题标题,但我找不到合适的标题。

我使用Laravel 3和Eloquent模型(Laravel的第一个项目)。 我有userlistitem模型。用户无法获取任何列表,列表可以获取项目。但是用户可以订购商品,因此每个用户/商品都会保存订单。

以下数据会更清晰(为简洁起见,简化了):

数据库表:

USER
--------
id
name

LIST
-------
id
name

ITEM
-------
id
list_id
name

USER_ITEM_ORDER
---------------
user_id
item_id
order

列表模型:

class List extends Eloquent {
    public function items() {
        return $this->has_many('Item');
    }
}

现在我想使用列表模型根据用户获取所有项目$list->items($user_id) - >包含用户订单的项目的数组。

有人能告诉我实现这个目标的方法吗?

2 个答案:

答案 0 :(得分:0)

请尝试使用此代码:

public static function NAMEUserId() {
        $query = DB::table('username')
        ->select(array('users.username', DB::raw('NAME(user's.id) as UserID')))
        ->join('users', 'items.user_id', '=', 'users.id')
        ->group_by('users.id')
        ->order_by('usersid', 'desc')
        ->get();
    return $query;
}

答案 1 :(得分:0)

呀!我修好了它。 :D我会回答我自己的问题,因为有一个投票...

这很简单,只需在返回的对象上使用Fluent,如下所示:

public function items($user_id = 0) {
    $items = $this->has_many('Item');

    // do we need to get the order?
    if($user_id != 0) {
        $items = $items->left_join('user_item_order', 'items.id', '=', 'user_item_order.item_id')
                       ->where('user_item_order.user_id', '=', $user_id)
                       ->order_by('user_item_order.order', 'asc');
    }

    return $items->get();
}