我有以下路线:
Route::get('/api/products/{product}', 'ProductController@get');
我的产品模型如下所示:
class Product extends Model
{
public function ingredients()
{
return $this->belongsToMany(Ingredient::class)->withPivot('value');
}
}
在我的控制器中,方法是:
public function get(Product $product)
{
return $product;
}
这仅以 JSON 形式返回Product
对象的属性。我还想返回相关成分和数据透视表值(与 with
方法一样(,以及可能的其他相关模型。
return $product->with('ingredients')
创建了所有产品的集合,因此这实际上不起作用,我必须按产品 ID 再次过滤它。我显然可以自己构建 JSON,但如果我想包含多个相关模型,那就变得乏味了。有没有简单的方法可以做到这一点?
您有三个选择:
-
在模型中使用
$with
class Product extends Model { protected $with = ['ingredients']; public function ingredients() { return $this->belongsToMany(Ingredient::class)->withPivot('value'); } }
-
加载关系并返回产品:
public function get(Product $product) { $product->ingredients; return $product; }
-
在产品上使用
load
方法:public function get(Product $product) { return $product->load('ingredients'); }