- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,对于我的项目模型 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/
我以编程方式配置 log4j 附加程序以在运行时创建不同的文件。我能够创建文件,并且我希望它们在每次运行时都重新开始。 String logfile = ("/home/Dev/" + hos
根据 https://laravel.com/docs/5.6/eloquent-serialization , 可以使用 setAppends在模型实例上动态添加任何可用的额外属性到模型。但是,除了
因此,对于我的项目模型 setAppends([]) 的工作原理如下: Project::find($projectId)->setAppends([]) 但是,如果我想为一个我渴望使用 with 加
我是一名优秀的程序员,十分优秀!