2017-04-17 188 views
0

所以,我需要在2个表格 - 项目和类别之间进行连接。MySQL表中的同名字段相互覆盖 - Laravel

我编码Laravel这里就是我:

$items = DB::table('items') 
      ->join('categories', 'categories.id', '=', 'items.category_id') 
      ->get(); 

然后我得到了一定的成果这样的:

{ 
    id: 3, 
    barcode: "0002", 
    category_id: "4", 
    price: 200, 
    in_use: 1, 
    serial_number: 1112, 
    model: "Toshiba", 
    condition_id: 3, 
    person_id: 1, 
    comments: "A monitor that is usually connected to a laptop.", 
    created_at: "2017-03-28 19:50:02", 
    updated_at: "2017-03-28 19:50:02", 
    name: "monitor", 
}, 
{ 
    id: 3, 
    barcode: "0003", 
    category_id: "4", 
    price: 300, 
    in_use: 1, 
    serial_number: 11342, 
    model: "Toshiba", 
    condition_id: 3, 
    person_id: 1, 
    comments: "A monitor that is usually connected to a laptop.", 
    created_at: "2017-03-28 19:50:02", 
    updated_at: "2017-03-28 19:50:02", 
    name: "monitor", 
}, 

两个表都有一些字段具有相同的名称如idcreated_atupdated_at。 问题是,因为它们具有相同的名称,所以一个表的值会覆盖另一个表的值。 如何获得第二个表值不覆盖第一个值时,他们有相同的列名? 或者,甚至更好,我如何从两个表中获得两个值? 也许使用AS关键字?

感谢您的帮助。

回答

1

是的,你应该使用AS关键字每个重复字段

这是它如何工作的:

$items = DB::table('items') 
     ->join('categories', 'categories.id', '=', 'items.category_id') 
     ->select('field1', 'field2 as field2name', 'field3') 
     ->get(); 

注:对于具有相同名称的领域,使用这种方式:“ table.field'

+0

谢谢。这可能是一个解决方案。但是有没有办法不指定我需要的每一个领域? – padawanTony

+1

如果您有两个表的示例,您可以从一个表中选择所有内容,只需更改另一个表的名称,例如,从类别中选择所有内容,然后从项目中重命名。 要从一张表中选择所有内容,请使用'table。*' –