Laravel-有许多关系,但没有加载
我的Laravel应用程序中的Laravel-有许多关系,但没有加载,laravel,laravel-7,eloquent-relationship,Laravel,Laravel 7,Eloquent Relationship,我的Laravel应用程序中的有许多-关系,我遇到了一个问题。 我敢肯定,这是一个简单的问题,但目前我正在努力解决,找不到原因 我有一个名为登陆页面的模型: <?php namespace app\Models\LandingPage; class LandingPage extends \App\Models\Base { public $table = "landing_pages"; protected $fillable = [
有许多-关系,我遇到了一个问题。
我敢肯定,这是一个简单的问题,但目前我正在努力解决,找不到原因
我有一个名为登陆页面的模型
:
<?php
namespace app\Models\LandingPage;
class LandingPage extends \App\Models\Base
{
public $table = "landing_pages";
protected $fillable = [
'name',
'event_id',
'url_id',
'is_update_needed',
'view',
'created_at',
'updated_at',
];
protected $hidden = [
];
protected $appends = [
'app_icon',
'landing_page_url_base_path'
];
...
public function app_info() {
return $this->hasOne(\App\Models\App\AppInfo::class, "landing_page_id", "id");
}
public function app_images() {
return $this->hasMany(\App\Models\App\AppImage::class, "landing_page_id", "id");
}
public function app_texts() {
return $this->hasMany(\App\Models\App\AppText::class, "landing_page_id", "id");
}
...
}
数据库中的所有设置是否正确:
登录页面:
应用程序文本:
我还可以在Laravel调试栏中看到,没有执行查询来加载应用程序文本:
我是忘了什么,还是弄错了什么
更新
登录页是另一个模型(guests
)的一部分。我在那里调用属性landing\u page
,但没有显式调用关系。它适用于app\u图像
或app\u信息
,因此我不认为我需要显式调用app\u文本
这是控制器部分,称为:
public function showEvent(\Illuminate\Http\Request $request, string $eventName, string $guestIdentifierToken) {
$guest = $this->guestRepository->getByIdentifierToken($guestIdentifierToken);
if($guest != null) {
if($guest->landing_page->is_update_needed == 1) {
//...
//do some stuff
}
return view('event.landingpage', [
'eventUrl' => url()->current(),
'guest' => $guest,
'event' => $guest->event,
'landingPage' => $guest->landing_page
]);
}
else {
return redirect('/notFound');
}
}
如果我显式调用该属性,它会起作用:
$guest->landing_page->app_texts = $guest->landing_page->app_texts;
但是为什么我需要为app\u文本
而不是app\u图像
或app\u信息
?您的登录页面
模型上有两个附件
:
protected $appends = [
'app_icon',
'landing_page_url_base_path'
];
当您的LandingPage
模型转换为json时,将包含这两个字段,这意味着将调用它们关联的访问器。我猜您正在使用getAppIconAttribute()
和getLandingPageUrlBasePathAttribute()访问器函数中的app\u信息
和app\u图像
关系
由于这些关系在这些访问器中使用,因此它们将包含在json输出中。但是,由于从未使用app_text
关系,因此将不包括它
如果希望json输出中包含app_文本
关系,则需要在转换为json之前加载它。最快的解决方案是将其加载到showEvent()
函数中:
$guest->landing_page->load('app_texts');
您是否正在调用页面上的app\u文本
关系?应该调用app\u文本的代码在哪里?没有明确说明,但我也没有调用其他关系。所以我不认为这是原因…你是不是急于加载其他的关系,然后忘记了这样做与这个关系?请看我的更新…是的,就是这样。非常感谢你的帮助!
$guest->landing_page->load('app_texts');