Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel-有许多关系,但没有加载_Laravel_Laravel 7_Eloquent Relationship - Fatal编程技术网

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 = [

我的Laravel应用程序中的
有许多
-关系,我遇到了一个问题。
我敢肯定,这是一个简单的问题,但目前我正在努力解决,找不到原因

我有一个名为登陆页面的模型

<?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');