第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Laravel 6 中的多態(tài)關(guān)系

Laravel 6 中的多態(tài)關(guān)系

PHP
開(kāi)滿天機(jī) 2022-06-17 15:25:53
我有一個(gè)問(wèn)題,我試圖自己解決幾個(gè)小時(shí),但我找不到合適的解決方案 - 所以我需要你的綜合腦力;)我有一個(gè)游戲管理 Laravel 應(yīng)用程序,它應(yīng)該為以下實(shí)體提供通用消息傳遞系統(tǒng):特點(diǎn)惡棍每個(gè)用戶可以有未知數(shù)量的角色和惡棍。消息系統(tǒng)應(yīng)該將每個(gè)實(shí)體相互連接,這意味著連接可能如下:字符 --> 字符角色 --> 惡棍惡棍 --> 角色惡棍 --> 惡棍顯然 Characters 和 Villains 是 Laravel 中不同的雄辯模型。為了獲得更好的概覽,我想開(kāi)發(fā)一個(gè)消息收件箱,例如網(wǎng)絡(luò)郵件程序,它顯示來(lái)自所有角色和惡棍的所有消息。我的想法是創(chuàng)建多態(tài)的一對(duì)多關(guān)系并向消息模型添加兩個(gè)變形:public function sender (){    return $this->morphTo();}public function recipient (){    return $this->morphTo();}而角色和反派模型也有兩個(gè)變體,每個(gè)都像:public function receivedMessages(){    return $this->morphMany('App\Models\Message', 'recipient');}public function sentMessages(){    return $this->morphMany('App\Models\Message', 'sender');}我的消息表包含多態(tài)關(guān)系的必填字段,在遷移期間使用以下命令創(chuàng)建:$table->morphs('sender');$table->morphs('recipient');所以在我的想法中,我可以簡(jiǎn)單地查詢特定用戶的所有消息,其中包括所有角色和所有惡棍消息。從該消息列表中,我應(yīng)該能夠檢索到各個(gè)角色和惡棍信息,就像這樣:@foreach($receivedMessages as $message)    @if($message->sender() instanceof \App\Models\Character)        // Do something character specific    @endif    @if($message->sender() instanceof \App\Models\Villain)        // Do something villain specific    @endif@endforeach不幸的是,我似乎無(wú)法從消息對(duì)象中檢索到角色和反派信息。如果我只是使用:$message->sender結(jié)果為null。如果我使用:$message->sender()結(jié)果不為空,但我仍然無(wú)法檢索角色或反派實(shí)例的屬性,例如:$message->sender()->name總是會(huì)拋出一個(gè) BadMethodCallException。有什么想法我弄錯(cuò)了嗎?我不再只見(jiàn)我害怕的樹(shù)木。
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

好吧,我想出了一個(gè)解決方案。

默認(rèn)情況下,當(dāng)您將 eloquent 關(guān)系作為屬性訪問(wèn)時(shí),關(guān)系的數(shù)據(jù)是延遲加載的。這意味著默認(rèn)情況下不加載它。

我希望這表現(xiàn)得像一個(gè)常見(jiàn)的延遲加載,這意味著當(dāng)我訪問(wèn)屬性時(shí),它會(huì)自動(dòng)加載關(guān)系并讓我訪問(wèn)相關(guān)模型的屬性。情況似乎并非如此。

一旦我將以下行添加到我的“消息”雄辯模型中,我上面所做的一切都完美無(wú)缺:

protected $with = ['sender', 'recipient'];

模型的受保護(hù)“with”屬性告訴 eloquent 在查詢數(shù)據(jù)時(shí)應(yīng)該預(yù)先加載(而不是延遲加載)哪些關(guān)系。添加發(fā)件人和收件人后,我的所有相關(guān)數(shù)據(jù)都默認(rèn)加載 - 不再懶惰 - 但已加載。

在我看來(lái),這種行為可能是 Laravel 6.7.0 中的一個(gè)錯(cuò)誤,我將在 GitHub 存儲(chǔ)庫(kù)中報(bào)告這一點(diǎn)。

可以在此處找到有關(guān)預(yù)加載的更多信息:https ://laravel.com/docs/6.x/eloquent-relationships#eager-loading


查看完整回答
反對(duì) 回復(fù) 2022-06-17
  • 1 回答
  • 0 關(guān)注
  • 103 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)