问题标签 [ecto]

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 回答
623 浏览

phoenix-framework - ecto 中的模式限定查询

我正在尝试将 ecto 与 postgres 模式一起使用,但是当从 repo.whatever 使用时,查询将作为表名定向到公共模式。

我可以使用 query/3 将有效的模式限定查询作为 sql 传递,如下所示:

并从模式中的表中获取结果。

这个:

结果是预期的sql:

但是,查询导致找不到表 schema.table 的错误。如果 postgrex 向 postgres 发送“schema.table”,它应该被解释为直接查询中的模式限定表名,对吗?postgrex 在发送之前是否以某种方式解析表名?

0 投票
1 回答
695 浏览

elixir - 如何查询嵌套关系中的项目?

凤凰框架 1.0.2

我有一个user_post_path(),因为我正在制作Users has_many Posts.

在我的帖子控制器中,我这样做:

在我的post/show.html我有:

第一个问题,写2个查询效率低吗?IE。 Repo.get!(id)Repo.get!(user_id)

或者写这样的东西更有效:

user_with_post = User |> Repo.get!(user_id) |> Repo.preload [:posts] |> #now do something to get posts.id = 5 for example

我认为编写一个查询更有效,(如果我错了,请纠正我!),这导致我的第二个问题。

一旦我预加载了帖子,我就不能仅仅Repo.get(post_id)因为我得到“不可查询”的错误。过滤用户帖子的正确方法是什么,以便我只获取具有我想要的特定帖子 ID/ID 的用户详细信息?

0 投票
3 回答
586 浏览

elixir - 在没有预加载的情况下检索 Ecto 关系的 ID

假设我有两个 Ecto 模型(以及它们的迁移):

如果我查询了一个项目模型,例如。

正如预期的那样,我无法访问project.client.id,因为我没有preload在查询中使用 a 。

每当我尝试访问project.client_id它时,它都会返回 nil。当然,我应该能够访问外键 ID 本身吗?

希望下面的代码能更好地说明:

0 投票
2 回答
10727 浏览

elixir - Ecto 中的多对多关系

我有一个用户模型和一个聊天模型。直观上,多人在任何时候都属于同一个聊天组,每个人可以有多个聊天组。因此聊天组必须属于多个user_id

我的聊天组和用户架构是:

有什么建议如何处理吗?

0 投票
1 回答
3606 浏览

elixir - Ecto模型`未定义的函数:`使用来自宏***在iex***中时

我在 Ecto 项目中遇到了这个问题。没有一个查询有效。我做了一些谷歌搜索和 github 问题搜索。很少但与我的问题无关。

这个问题是从这个https://github.com/elixir-lang/ecto/issues/602#issuecomment-145596702开始的(主要与我的问题有关)

炸毁** (RuntimeError) undefined function: u/0。不仅是那个模型,其他模型也是如此。我的部门。

目前从 db 读取的所有内容都是通过psql. 它可以完成工作,但很烦人。:)

供参考。

和迁移

0 投票
1 回答
705 浏览

mysql - Phoenix-Framework : transform, associate and nil check Ecto parent model when creating child model

I'm coming to the Phoenix framework from Rails. So far it's been a fairly easy transition. Phoenix is newer, though, and I'm having trouble finding some specific information:

I'm using my Phoenix app as an API service layer.
I want my UI form (and incoming curl requests) to use a virtual field to find an associated parent model, and fill the child model's changeset with the appropriate attribute. So far, so good:

in my child model:

...

This is where I'm stuck. I do not want to allow the child to be created without a parent. How and where do I nil check the parent model? Everything I've tried has either blocked or allowed creation unconditionally, despite conditional statements.

It seems like I need to preload the parent model before the check, since Phoenix is designed to prevent people like me from abusing lazy load. Unfortunately, I don't know what the proper load pattern is in general, so I'm not sure how to apply it here. (I'm using MySQL, if that's relevant)

Hints and tips about where to look and what to look at to help me figure this out are appreciated! Thanks!

---EDIT---
Per @Gazler 's advice I have made sure that my child model migration has a reference:

I'm still a little lost -- I want to find the parent by the parent field parent_name ("Jane Doe"), make sure the parent model exists, and associate the child using parent_id (1). I'm not sure how to trigger these actions around using a virtual field.

So, I'm not sure how to structure finding the parent, building the association, and checking the foreign key validation, since the foreign key will never exist in the original params. Thoughts?

Thanks so much.

---RESOLVED---
Using @Gazler 's updated answer, I can successfully nil check my parent model in the child controller without a virtual attribute or before_insert.

this validates the incoming parameters exactly like i need! thanks @Gazler!

0 投票
1 回答
6328 浏览

elixir - phoenix 框架如何在 Ecto 模型中设置默认值

我想在 Phoenix Framework 中为模型设置默认值,我尝试过:

如何在模型中设置默认值,以便在渲染 new.html 时显示它们?

顺便说一句,这是我的默认变更集功能。我不知道如何使用它?我假设在演员表之后在管道中使用 Ecto.changeset.put_change?

0 投票
2 回答
20420 浏览

postgresql - 如何使用 Postgres 使用 Ecto 存储数组

我想使用 Postgres 使用 Ecto 存储浮点值数组。我将 Ecto 与 Phoenix 框架和 Elixir 一起使用。

我将如何为此定义我的模型和迁移?

我没有尝试太多,除了搜索网络,没有发现任何有用的东西:-(

我确实尝试使用这样的模式定义模型:

这给出了一个错误“无效或未知类型:字段数组:my_array”

0 投票
2 回答
2194 浏览

elixir - Ecto has_many:通过形式

我试图在 Ecto 中建立一种关系,以实现模型和模型has_many :through之间的多对多关系。UserGroup

我能在网上找到的唯一信息与 José Valim在这里的一篇文章中的嵌套属性有关(顺便说一句,这非常好)。

由于系统中已经存在这些组,我希望进行多选输入。我在这样做时遇到了几个问题。我不相信可以groups直接在变更集中分配关联,因为每次尝试这样做时都会出错。我的下一个想法是手动完成工作(查找、删除和插入GroupMembership记录),但是我不确定这是否是正确的路径,并想先获得一些建议。

由于代码示例有很多行,我在这里做了一个要点。

如果我希望我直接在这个问题中发布它,我当然可以这样做。

感谢所有的帮助!

0 投票
2 回答
1754 浏览

elixir - 更新时 Ecto.Changeset 相关模型错误

Ecto 在更新 has_one 关联时给我一个错误:

有问题的型号:

控制器更新动作

参数

父 = %{"some_number" => "902", "thing" => %{"somethingfield" => "blah", "parent_id" => "8"}

错误

根据文档,父模型上的变更集函数看起来像是从父模型中分离出来的“事物”——但我不明白为什么?

新/创建操作工作得很好。