Php Laravel正在尝试选择关系列的以下内容
我有一个雄辩的模型Php Laravel正在尝试选择关系列的以下内容,php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,我有一个雄辩的模型App\list,它属于App\Product public function product() { return $this->belongsTo(Product::class); } 在Listing Controller中,我试图从产品表中获取一个包含两列(name,keywords)的特定列表 public function readListing(Request $request, $listingId) { $query = Listing
App\list
,它属于App\Product
public function product()
{
return $this->belongsTo(Product::class);
}
在Listing Controller中,我试图从产品表中获取一个包含两列(name
,keywords
)的特定列表
public function readListing(Request $request, $listingId)
{
$query = Listing::query();
$item = $query->with(['product' => function (Builder $query) {
return $query->select(['name', 'keywords']);
}])->findOrFail($listingId);
return response()->json($item->toArray(), 200);
}
我得到这个错误:
打字错误
传递给App\Http\Controllers\API\ListingController::App\Http\Controllers\API{closure}()的参数1必须是light\Database\Eloquent\Builder的实例,light\Database\Eloquent\Relations\belongs的实例,在第580行的…\vendor\laravel\framework\src\light\Database\Eloquent\Builder.php中调用
580号线在哪里
$item = $query->with(['product' => function (Builder $query) {
当我从行中删除类型声明时,如下所示
$item = $query->with(['product' => function ($query) {
我得到一个结果,但它不包括product表中的两列(name
,keywords
)
{
id: 1,
product_id: 1,
listing_price: 10,
actual_price: 5,
in_stock: 1,
listing_date: null,
delisting_date: null,
created_at: "2021-02-24T12:33:48.000000Z",
updated_at: "2021-02-24T13:45:25.000000Z",
deleted_at: null,
category: "Fruits",
category_id: 2,
description: "Rem laudantium aut",
image_urls: [
".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd.jpg",
".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu.jpg",
".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX.jpg"
],
image_medium_urls: [
".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-medium.jpg",
".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu-medium.jpg",
".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX-medium.jpg"
],
image_small_urls: [
".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-small.jpg",
".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu-small.jpg",
".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX-small.jpg"
],
thumbnail_url: ".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-small.jpg",
product: null
}
为什么类型声明会导致问题?如何让它从相关表中选择两列?您需要在案例中包含外键
列表id
$query = Listing::with(['product' => function ($query) {
// add listing_id
return $query->select(['listing_id', 'name', 'keywords']);
}])
->findOrFail($listingId);
这是在拉威尔提到的
使用此功能时,应始终包括id列和
您希望输入的列列表中任何相关的外键列
找回
您需要在您的案例中包含外键
列表\u id
$query = Listing::with(['product' => function ($query) {
// add listing_id
return $query->select(['listing_id', 'name', 'keywords']);
}])
->findOrFail($listingId);
这是在拉威尔提到的
使用此功能时,应始终包括id列和
您希望输入的列列表中任何相关的外键列
找回
不要像这样做return$query->select(['name','keyword'])
只要像这样做$query->select('name','keyword')
不带括号和return关键字,而不是像这样做return$query->select(['name','keyword'))
只需像这样做$query->select('name','keyword')
不带括号和return关键字虽然product表没有listing_id
列,但当我添加它的主键列和另一个依赖列时,它会工作,如下所示:return$query->select(['id',name',keywords',category_id'])
尽管产品表没有listing_id
列,但当我添加其主键列和另一个依赖列时,它会工作,如:return$query->select(['id',name',keywords',category_id')代码>