如何使用加入Laravel?

时间:2016-09-28 21:43:33

标签: laravel laravel-5.2 laravel-5.3

我有两张桌子:product, product_names

Product   Product_names
id        id | name | language | objectId

我在模型中使用函数names(),通过key: id = objectId

连接这两个表

当我提出要求时:

$arr = Product::with("names")->get();

我从表Product获取对象的集合,并用names()

分隔了calection

如何在一个集合结果中合并?

所以,我需要得到一些东西:

$oneResultObject = SELECT Product_names.name AS name from Product LEFT JOIN Product_names ON Product_names.objectId = Product.id;

不使用::with("Product_names")

3 个答案:

答案 0 :(得分:0)

例如:

product.php模型

class Product extends Model
{
    protected $primaryKey = 'id';

    function productNames() {
       return $this->hasOne('App\ProductName', 'id', 'objectId');
    }

    public function show($id){
         self::with('productNames')->where('id', $id)->get();
    }
}
在ProductController.php中

 public function viewProduct($id, Product $products)
    {
        $product = $products->show($id);
        return view('product', ['products' => $products]);
    }

in product.blade.php

<table>
<tbody>
@foreach ($products as $product)
<tr>
<th>{{ $product->id }}</th>
<td>{{ $product->productNames->name }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>

希望这可以解决您的问题

答案 1 :(得分:0)

$products = DB::table('product')
        ->leftJoin('product_names', 'product.id', '=', 'product_names.objectId ')
        ->get();

答案 2 :(得分:0)

您可以使用Laravel的查询生成器(https://laravel.com/docs/5.3/queries#joins

对于你的问题,这里是:

if