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')