问题标签 [laravel-eloquent-resource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
49 浏览

laravel - Laravel Eloquent:API 资源 - 它是如何工作的,以便我可以创建一个类似的类?

看这个例子:

这在内部是如何工作的?因为乍一看我们只是返回一个类的对象UserResource。但是 Laravel 神奇地调用了该toArray函数并正确解析了它。

我希望我的推荐课程也能正常工作。

输出数组/json 应解析为:

0 投票
1 回答
333 浏览

laravel - 如何在父母和孩子上应用 Laravel Eloquent where() 条件(hasMany() 关系)

我有一个名为 Laravel Eloquent ModelEmailList和一个名为Subscriber. 我在 EmailList 上定义了以下 hasMany 关系。

这种关系运作良好。

我现在想对where()父母应用一个条件where(),对孩子应用一个条件。

例如,我有两个EmailLists,一个属性id和一个名为listname(“List A”和“List B”)的属性。我的模型有Subscriber四个相关属性:idname和。emailemail_list_id

问题:我想从某个列表中获取所有订阅者,例如“列表 A”,并使用$query(Livewire 的搜索功能)过滤订阅者

为了做到这一点,我想出了以下代码:

此代码部分有效,因为订阅者确实被过滤了,但电子邮件列表没有。换句话说,我只是搜索了所有订阅者,而不是特定列表中的订阅者。

经过大量搜索后,我发现我可能应该使用 a whereHas(),但是当我尝试这样做时,它只给了我 EmailLists 而不是订阅者。

如果有人可以帮我过滤这个,那就太好了。对于经验丰富的开发人员来说,这可能是小菜一碟,但它对我有很大帮助!

更新: 在看到 EricLandheer 的答案后,我意识到(当然)我也有 EmailList id。也许这使它更简单一些,这样您就可以使用 find() 而不是 where()->first() 子句。(我使用 first() 因为 'listname' 是唯一的,我只想要一个实例。对吗?)

0 投票
0 回答
9 浏览

model-view-controller - 从“父”调用雄辩的关系控制器动作?

我在三个模型之间建立了关系:

组-> 一对多类别-> 一对多条目

我使用工匠将控制器创建为资源,并为每个控制器添加了默认路由。我想知道的是,如果我希望 show() 方法/模板显示给定类别下的所有条目,我可以让它的视图和/或控制器以某种方式调用 EntryController 'show()' 方法来呈现它? (类似地在组下显示类别,甚至在组下的类别下显示条目?)

例如,我希望 CategoryController::show() 和/或 categories/show.blade.php 调用 EntryController::show() 以获取每个条目记录等。

0 投票
1 回答
144 浏览

laravel - 在隔离模型副本中调用 loadMissing()

我有一个问题可能有点傻。我正在尝试复制模型实例并将其存储在变量中以调用该loadMissing方法。loadMissing这个想法是在不受原始模型影响的情况下调用方法。让我解释。

我的User模型中有以下方法:

问题是,以这种方式,原始模型实例受到影响,并且它在原始实例中加载了我仅在此方法中加载的所有关系。我的问题是:有没有办法在模型实例的副本中加载和隔离关系而不影响原始模型?

提前致谢。

编辑 1

我也尝试过克隆实例并尝试loadMissing在克隆实例上使用该方法,但原始实例也受到影响。例如:

但是通过这种方式,我得到了以下结果。请注意,当我试图在克隆实例中加载关系时,原始实例和克隆实例都在加载关系:

$original

1

$cloned

图像

我想知道这是否是正常行为。如果这是正常行为,我想不是,我想知道是否有任何方法可以在loadMissing不修改原始实例的情况下在实例的副本、副本或克隆上使用该方法。非常感谢您提前。

编辑 2

我的控制器看起来像这样简单:

解决方案

经过几天寻找文档,进行测试并稍微拉扯一下头发,我找到了解决问题的方法并分享它,以防将来有人来这里寻找类似的信息。

基本上,帮助我找到正确方法的答案是:

https://stackoverflow.com/a/29787693/13066106

官方 PHP 文档中记录了这一点:

https://www.php.net/manual/en/language.oop5.cloning.php

我在这里逐字复制并粘贴最相关的内容:

当一个对象被克隆时,PHP 将对该对象的所有属性执行一个浅拷贝。任何引用其他变量的属性都将保持引用。

当我到达这一点时,我明白它为什么不起作用......我正在克隆一个类型的集合,Illuminate\Database\Eloquent\Collection这个集合包含多个类型的对象Role,但根据文档,当我修改任何属性时,这是正常行为在克隆实例中,更改将在原始实例中反映给我。

从这里,我查找了有关它的更多文档,并找到了一篇绝对帮助我解决问题的文章:

不要克隆你的 php 对象,DeepCopy 他们

这篇文章的描述性很强,基本上它的作用是建议使用包DeepCopy

幸运的是,这个包默认已经是 Laravel 的依赖了,所以我不必用 composer 安装它。我只是使用该deep_copy方法克隆实例。

非常感谢所有以某种方式帮助过我的人。我希望我分享的文档链接对那些来这里寻找类似信息的人有用。

0 投票
1 回答
94 浏览

laravel - 即使在锚标记的 href 中设置了正确的 id,我的控制器也会在后面加上一个 id

是)我有的

刀片.php 文件

Laravel 中的控制器

问题

上面的控制器,总是删除 db 中后面一个 id 的记录。 例如,如果请求中发送的 id 为 14,则控制器删除 id 为 13 的记录。

我想提到的与这个问题相关的另外两个重要细节是,

-> 我已经仔细检查了请求发送到的 url,并且 url 包含正确的 id。所以它必须是失败的控制器。
-> 即使上面的控制器代码不起作用,下面的代码也可以正常工作。

我无法弄清楚为什么我在“Laravel 中的控制器”下键入的代码不起作用,而我直接在上面键入的代码起作用。

0 投票
1 回答
38 浏览

php - 请求所有数据的格式化结果

我有我的控制器index()show()

在我的资源中,show()具有我想要返回的格式,因此http://127.0.0.1/Test/1的结果是带有格式化 JSON 的 ID 1。

我希望index()通过使用我的资源以相同的方式返回。当我index()http://127.0.0.1/Test上执行时,它返回我的所有数据,但不是我想要的格式化 JSON。

资源代码: