2017-04-26 65 views
0

在我檔案模式,我設置好的這種關係1對1的反比關係「屬於關聯」給人一種集合laravel而不是模型

public function lease() 
{ 
    return $this->belongsTo(Lease::class, 'lease_id', 'id'); 
} 

在我租賃模型我seeted這樣

public function profile() 
{ 
    return $this->hasOne(Profile::class, 'lease_id', id); 
} 

只要我知道laravel你可以做

$profile = factory(App\Profile::class)->create(); 

$profile->lease()->get();

然後用模型正確響應集合 的內部,如果我做 $profile->lease 因子效應正確直接與模型

它不應該是動態propertis執行查詢的時候了像 - > lease() - > get()?的快捷方式?爲什麼它給出不同的格式化結果?

+0

1配置文件可以有多個租約,租期1有1個輪廓 –

+0

我忘了說,它應該是一比一的關係。正如我在文檔中看到的那樣**我們可以使用belongsTo方法定義hasOne關係的反函數** 還有其他方法嗎? –

+1

從技術上講,如果你想要1比1,你仍然可以爲同一個配置文件擁有多個租約 - 你必須在同一個表中聲明這些字段 –

回答

1

當您在建築商上致電get時,您總會收到一個集合。當你在這樣的構建器上調用first時,你會得到一個模型或null。基於關係對象的關係的動態屬性將分別在其加載時分別使用getfirst進行查詢。這就是爲什麼$model->relationship正在向您返回您期望的結果。

單數的關係會導致find和許多導致get的關係。

Laravel 5.4 - Docs - Eloquent - Relations - Relationship Methods vs Dynamic Properties

+0

哇**單數的關係,導致一個查找和許多導致get。**有沒有辦法指定何時應用get()或first()在動態屬性 –

+1

@JosePalazuelos no它基於關係類型...一個hasOne永遠不會回報很多。一個hasMany有望返回很多。你必須決定你想要你的關係是:) – lagbox