高级 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);
在产品 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() 函数来指出您也想接收商店数据。参见:
因此您的查询将是:
Product::with('store')
->where('category_id', $category->id)
->select(productFieldArray)
->paginate(20);