gpt4 book ai didi

php - `setAppends([])` 位于 Laravel 中由 `with` 加载的关系上

转载 作者:行者123 更新时间:2023-12-03 02:07:36 28 4
gpt4 key购买 nike

因此,对于我的项目模型 setAppends([]) 的工作原理如下:

Project::find($projectId)->setAppends([])

但是,如果我想为一个我渴望使用 with 加载的关系设置附加到空数组,该怎么办,如下所示:

$project = Project::with('pages')->find($projectId);

->setAppends([]) 在上面的代码中不起作用,因为它会将其设置为 Project 的空数组,而不是 Page .

任何人都可以指导如何实现这一目标吗?

更新:

page.php 模型具有附加和隐藏,如下所示:

class Page extends Model {
// I don't want to load this (`appends`) attributes when I call Project::find($projectId)
protected $appends = ['thumbnail_url', 'total_annotations', 'total_tasks', 'total_done_tasks', 'image_url', 'edited_data_items_count'];
protected $hidden = ['tasksCount', 'doneTasksCount', 'annotationsCount', 'xsl', 'xml', 'dataxml_version', 'sort_order', 'editedDataItemsCount', 'deletedDataItemsCount'];
}

Project.php 模型如下所示:

class Project extends Model {

use SoftDeletes;

protected $appends = ['total_tasks', 'total_done_tasks', 'total_pages', 'total_annotations', 'edited_dataitems_total_count'];
protected $hidden = ['tasksCount', 'doneTasksCount', 'pagesCount', 'annotationsCount', 'folder_path', 'attachment_url', 'pages'];
}

最佳答案

在 Project 中,您可以提供一个静态方法,该方法允许您迭代急切加载的页面并调整其附加数组。

    class Project
{
...

public static function eagerFindWithoutAppends($projectId)
{
$model = self::with('pages')->find($projectId);
$model->setAppends([]);

foreach ($model->pages as $page) {
$page->setAppends([]);
}

return $model;
}

...
}

但是,如果我理解正确的话,Pages 类中的动态数据不仅仅提供基于定期加载的数据的便捷快捷方式(例如 getFullName 之类的内容,它将结合名字和姓氏)。

你的附加是做什么的?

I don't want to load this (appends) attributes

我能想到的另一个可能的解决方案是从 Pages 继承 NoneAppendPages 并覆盖 $append 和所有相关的 get... 方法。

然后在 Project 中声明与 Pages 旁边的 NoneAppendPages 的另一个关系。然后,您急切加载 Project::::with('none_append_pages')->find($projectId);

class NoneAppendPages extends Pages
{

protected $appends = [];

getYourDynamicAttributeMethodName() { return null; } // for all your appends

}

class Project
{
public function pages()
{
// I don't know what relationship you declared / assuming on to many
return $this->hasMany('App\Page');
}

public function noneAppendPages()
{
// declare the same way you did with pages
return $this->hasMany('App\NoneAppendPage');
}

}

关于php - `setAppends([])` 位于 Laravel 中由 `with` 加载的关系上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com