Laravel 尝试 select belongsTo 关系列
Laravel trying to select belongsTo relationship columns
我有一个 Eloquent 模型 App\Listing
其中 belongsTo
App\Product
public function product()
{
return $this->belongsTo(Product::class);
}
在列表控制器中,我试图从产品 table 中获取包含 2 列(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 必须是 Illuminate\Database\Eloquent\Builder 的实例,给定的 Illuminate\Database\Eloquent\Relations\BelongsTo 实例,在 ...\vendor\[ 中调用=51=]\framework\src\Illuminate\Database\Eloquent\Builder.php 第 580 行
第 580 行是
$item = $query->with(['product' => function (Builder $query) {
当我从行中删除类型声明时
$item = $query->with(['product' => function ($query) {
我得到一个结果,但它不包括来自产品 table.
的 2 列(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
}
为什么类型声明会导致问题,我如何将它从相关 table 的两列中获取到 select?
您需要在您的案例中包含 foreign_key
listing_id
$query = Listing::with(['product' => function ($query) {
// add listing_id
return $query->select(['listing_id', 'name', 'keywords']);
}])
->findOrFail($listingId);
在 laravel docs
中提及
When using this feature, you should always include the id column and
any relevant foreign key columns in the list of columns you wish to
retrieve.
我有一个 Eloquent 模型 App\Listing
其中 belongsTo
App\Product
public function product()
{
return $this->belongsTo(Product::class);
}
在列表控制器中,我试图从产品 table 中获取包含 2 列(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 必须是 Illuminate\Database\Eloquent\Builder 的实例,给定的 Illuminate\Database\Eloquent\Relations\BelongsTo 实例,在 ...\vendor\[ 中调用=51=]\framework\src\Illuminate\Database\Eloquent\Builder.php 第 580 行
第 580 行是
$item = $query->with(['product' => function (Builder $query) {
当我从行中删除类型声明时
$item = $query->with(['product' => function ($query) {
我得到一个结果,但它不包括来自产品 table.
的 2 列(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
}
为什么类型声明会导致问题,我如何将它从相关 table 的两列中获取到 select?
您需要在您的案例中包含 foreign_key
listing_id
$query = Listing::with(['product' => function ($query) {
// add listing_id
return $query->select(['listing_id', 'name', 'keywords']);
}])
->findOrFail($listingId);
在 laravel docs
中提及When using this feature, you should always include the id column and any relevant foreign key columns in the list of columns you wish to retrieve.