高级选择语句(Laravel)

时间:2015-11-29 01:40:42

标签: laravel laravel-5

在Products表中,我有store_id列,用于连接产品和商店。

在我使用Angular的APIController中,我有这个return语句。我正在退回一系列产品。

return Product::where('category_id', $category->id)
           ->select(array('id', 'name', 'newprice', 'image',
               'store_id', 'link'))
           ->paginate(20);

我的问题是,我想要返回商店名称而不是返回store_id(来自products表),而不是存储在同一个表中。有没有办法做到这一点? 我唯一的选择是使用JOIN吗?

1 个答案:

答案 0 :(得分:0)

我建议您使用这样的Laravel(/ Eloquent)关系:

ApiController:

$productFieldArray = ['id', 'name', 'newprice', 'image', 'store_id', 'link'];
$product = Product::where('category_id', $category->id)
                       ->select(productFieldArray)
                       ->paginate(20);

// Get the value you want (I guess it's the name attribute?)
$store = $product->store->name;

模型关系:

Product.php:

...

public function store() {
    return $this->belongsTo('App\Store');
}

...

Store.php:

...

public function products() {
    return $this->hasMany('App\Product');
}

...

编辑:

您必须在查询中使用with()函数来指出您希望接收商店数据。请参阅:Laravel - accessing relationship Models with AngularJShttp://laravel.com/docs/4.2/eloquent#eager-loading

所以你的查询将是:

Product::with('store')
    ->where('category_id', $category->id)
    ->select(productFieldArray)
    ->paginate(20);