高级 Select 语句 (Laravel)

Advanced Select statement (Laravel)

在产品 table 中,我有 store_id 列将产品与商店联系起来。

在我与 Angular 一起使用的 APIController 中,我有这个 return 语句。我正在 return 收集产品。

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

我的问题是,我不想 returning store_id(来自产品 table)我想 return 商店名称,它不存储在同样的table。有什么办法吗? 我唯一的选择是使用 JOIN 吗?

我建议你用这样的 Laravel(/Eloquent) 关系来做:

Api控制器:

$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() 函数来指出您也想接收商店数据。参见: or http://laravel.com/docs/4.2/eloquent#eager-loading.

因此您的查询将是:

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