cuốn sách gpt4 ai đã làm

php - Laravel-eloquent:调用未定义的方法 Illuminate\Database\Eloquent\Collection::where()

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 13:42:49 29 4
mua khóa gpt4 Nike

Tôi có hai mô hình có mối quan hệ nhiều-một:

lớp Bữa ăn mở rộng \Eloquent {
/**
* Số nguyên công khai $id - khóa chính;
* Chuỗi công khai $name;
*/
được bảo vệ $fillable = array('id','name');

bữa ăn chức năng công cộngProperties()
{
return $this->hasMany('MealProperty');
}
}

lớp MealProperty mở rộng \Eloquent {
/**
* Số nguyên công khai $id - khóa chính;
* Số nguyên công khai $meal_id;
*/
được bảo vệ $fillable = array('id','meal_id');

bữa ăn công cộng()
{
return $this->belongsTo('Meal', 'meal_id');
}
}

Nếu tôi yêu cầu bữa ăn đầu tiênProperty thì mọi chuyện sẽ ổn:

$mealProp = Bữa ăn::first()->mealProperties->first();

Nhưng nếu tôi yêu cầu MealProperty với id cụ thể của bữa ăn đầu tiên theo cách này:

$mealProp = Bữa ăn::first()->mealProperties->where('id','=','1')->first();

Tôi gặp lỗi này:

Gọi tới phương thức không xác định Illuminate\Database\Eloquent\Collection::where()

Tôi đã tìm kiếm trên Google suốt hai giờ để tìm hiểu xem mình đang làm gì sai nhưng vẫn không tìm thấy gì.

Nếu tôi không thể sử dụng phương thức Where thì có cách nào để có được một MealProperty cụ thể không?

Cảm ơn sự giúp đỡ của bạn!

câu trả lời hay nhất

Cập nhật Laravel 5:

Kể từ phiên bản v5,Hỗ trợ\Bộ sưu tập Có một phương pháp trên đối tượng Ở đâu, vì vậy câu hỏi/câu trả lời này trở nên không liên quan. Phương pháp này hoạt động với lọc Hoàn toàn giống nhau, tức là. Trả lại bộ sưu tập đã lọc ngay lập tức:

$mealProp = Meal::first()->mealProperties->where('id','=','1'); // bộ sưu tập đã lọc

// như đã nói, đoạn mã này hoàn toàn hợp lệ trong L5:
$mealProp = Bữa ăn::first()->mealProperties->where('id','=','1')->first();

Bạn phải phân biệt hành vi của Laravel:

(thuộc tính động) Bộ sưu tập hoặc mô hình hùng biện

$meal->mealProperties

đối tượng quan hệ

$meal->mealProperties()

Hiện nay:

// bữa ănProperties là Bộ sưu tập Eloquent và bạn gọi Bộ sưu tập đầu tiên ở đây
// nên về cơ bản nó không ảnh hưởng tới truy vấn db
$mealProp = Bữa ăn::first()->mealProperties->first();

// ở đây bạn thử thêm mệnh đề WHERE trong khi truy vấn db đã được gọi
$mealProp = Bữa ăn::first()->mealProperties->where('id','=','1')->first();

// Vì vậy đây là điều bạn muốn làm:
$mealProp = Bữa ăn::first()->mealProperties()->where('id','=','1')->first();

Về php - Laravel-eloquent: Gọi phương thức không xác định Illuminate\Database\Eloquent\Collection::where(), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/22944937/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress