Laravel5:雄辩和加入

时间:2018-04-08 02:22:40

标签: mysql laravel eloquent

  1. 项目表

    | id    | item_id | item_title |
    |-------|---------|------------|
    | 1     | 1002    | A          |
    | 2     | 1003    | B          |
    | 3     | 1004    | C          |
    
  2. 卖表

    | id | item_id   |  
    |----|-----------|
    | 1  | 1002 1003 |
    | 2  | 1003 1004 |
    | 3  | 1004 1002 |
    
  3. 我想要结果:卖出表1.项目标题是A B

    我想将sells表与item表合并,然后将sells表的item_id与item表的item_title相匹配。

2 个答案:

答案 0 :(得分:1)

表定义看起来不正确,您应该有一个将itemssells相关联的数据透视表,因此sell_item表:

item_id | sell_id
-----------------
1       | 1
1       | 3
2       | 1
2       | 2
3       | 2
3       | 3

然后使用eloquent,您可以创建模型来表示您的表格并使用BelongsToMany定义关系:

class Item extends Model {
    public function sells() {
         return $this->belongsToMany(Sell::class);
    }
}

class Sell extends Model {
    public function items() {
         return $this->belongsToMany(Item::class);
    }
}

任何一个模型的每个实例都可以通过$item->sells$sell->items访问它的相关模型。

如果不进行Eloquent路由,查询构建器可以执行连接:

DB::table('sells')->join('items', 'sells.item_id', '=', 'items.item_id')
                  ->select('sells.*', 'items.title')
                  ->get();

答案 1 :(得分:0)

表格定义看起来不正确,如果您已经纠正,那么您的模型重播应该像

class Item extends Model {
    public function sells() {
         return $this->belongsToMany(Sell::class);
    }
}

class Sell extends Model {
    public function items() {
         return $this->belongsToMany(Item::class);
    }
}

任何一个模型的每个实例都可以通过$ item-> sells和$ sell->项目访问它的相关模型。

如果不进行Eloquent路由,查询构建器可以执行连接:

DB::table('sells')->join('items', 'sells.item_id', '=', 'items.item_id')
                  ->select('sells.*', 'items.title')
                  ->get();

或者,如果您的型号名称为Sell,则

$response=Sell::with('items')->get();