我有兩個模型[關系是一對多/類別旅行]:
類別型號代碼:
class Category extends Model
{
use HasFactory;
protected $fillable = [
'id',
'category_name',
'category_desc',
'category_img',
];
public function trip() {
return $this->hasMany(Trip::class);
}
}
行程型號代碼:
class Trip extends Model
{
use HasFactory;
protected $fillable = [
'name',
'description',
'max_visitors',
'price',
'date',
'image',
'guide_id',
'category_id',
];
public function category()
{
return $this->belongsTo(Category::class);
}
}
當我使用此代碼時,我會收到此錯誤:
TypeError Symfony\Component\HttpFoundation\Response::setContent(): Argument #1 ($content) must be of type ?string, Illuminate\Database\Eloquent\Relations\BelongsTo 給定,在 C:\Users\Orange\Desktop\ 中呼叫ON GITHUB\Tours-Booking\vendor\laravel\framework\src\Illuminate\Http\Response.php 第 72 行
$trip = Trip::findOrFail(1);
return $trip->category();
但是當不加括號寫這個時,我不會得到這個錯誤,有什么問題?
$trip = Trip::findOrFail(1);
return $trip->category;
uj5u.com熱心網友回復:
正如用戶所解釋的(但不完全):
您正在控制器中回傳關系,但這是無效的(基于錯誤)。因為BelongsTo無法序列化為 a string,它嘗試回傳該BelongsTo物件,因此給您那個錯誤(看,它說它是想要null或 a string,但您正在回傳BelongsTo)。
當你這樣做$model->relation(沒有()),這意味著它會試圖讓所有的資料滿足關系并將其存盤為一個Category在$model->relation(因為它是一個BelongsTo),但是當你用$model->relation()你創建一個query,所以你可以查詢,不管你的關系想要/需要,比如$model->relation()->where('status', 'Active')->get()...
你有兩個解決方案:要么回傳$trip->category(它將是一個Category物件/模型)$trip->category()->get()或任何查詢但使用->get()(將回傳一個Collection)或->first()(將回傳一個Category模型)最后......
再次閱讀檔案,以便您現在更好地理解:Relationships and First vs Get和BelongsTo 檔案。
uj5u.com熱心網友回復:
當您呼叫該方法時,它會實體化一個 eloquent 實體,您可以在其中將其擴展為一個查詢,該查詢將為您提供一個 Category 模型
示例(這可能不是最合適的示例)
$trip = Trip::findOrFail(1);
return $trip->category()->where('category_name', 'something')->first();
后者回傳一個集合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399646.html
下一篇:Laravel模型中的空關系
