- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Laravel 应用程序,我正在将旧数据库迁移到新数据库。我对表进行了一些更改,添加了一些新表,并删除了一些表。我为此制作了一个迁移脚本。
我有一个用户。该用户被分配到一所学校和一个组。在我的旧数据库中,用户被分配到一所学校和一组。因此,我的用户表中有一个名为“group_id”的列和一个名为“school_id”的列。
现在,我制作了一个映射表(我想这是正确的英文单词),因为用户应该被分配到多个学校和多个组。
用户表:
ID | username | password | more...
学校表:
ID | name | address | more...
组表:
ID | name | alias | more...
group_user table:
ID | group_id | user_id | school_user_id
user_school table:
ID | user_id | school_id
如您所见,我还将 school_user 关系的 ID 添加到映射表中,因为这样可以更轻松地在我的应用程序中使用。如果我从学校中删除用户,我可以使用外键删除 group_user 关系。原因很简单:用户必须分配到一个学校,否则他不能在一个组中。
我用于保存用户的 Laravel Controller 是:
$user = new User;
$user->id = $gebruiker->id;
$user->username = $gebruiker->gebruikersnaam;
$user->password_md5 = $gebruiker->wachtwoord;
$user->firstname = $gebruiker->voornaam;
$user->prefix = $gebruiker->tussenvoegsel;
$user->lastname = $gebruiker->achternaam;
$user->phonenumber = $gebruiker->telefoonnummer;
$user->emailaddress = $gebruiker->email;
$user->gender = ($gebruiker->geslacht == 'man' ? 'male' : 'female');
$user->birthdate = $gebruiker->geboortedatum;
$user->save();
$user->groups()->sync(array('group_id' => $gebruiker->groep_id));
$user->schools()->sync(array($gebruiker->school_id));
我的用户模型有两种方法:
public function schools()
{
return $this->belongsToMany('School');
}
public function groups()
{
return $this->belongsToMany('Group');
}
我可以为学校保存关系。这很容易,因为映射表 school_user 有两列。 Laravel 为我解决了这个问题。但是,在 group_user 表中我有三列
我试图让我的 Controller 保存这样的关系:
$user->groups()->sync(array('group_id' => $gebruiker->groep_id, 'school_id' => $gebruiker->school_id));
但是,不幸的是,它不起作用。谁能告诉我该怎么办?
编辑:对不起!我没有问正确的问题。我对这篇文章进行了编辑,并将其设为斜体。
最佳答案
定义关系时,您需要在数据透视表中指定任何其他列。所以:
public function groups()
{
return $this->belongsToMany('Group')->withPivot(['id','school_user_id']);
}
请参阅文档 here .
<小时/>更新:
您应该使用attach
和detach
(而不是sync
)将您的用户与群组和学校关联。 sync
将从中间数据透视表中删除不在您传递给它的数组中的任何模型,这意味着在您现有的代码中,$user->schools()->sync(array( $gebruiker->school_id))
将删除与用户关联的所有其他学校。这将允许用户仅与一所学校关联。如果您要对群组使用同步
,则同样适用于群组。
因此,在使用 $user->save()
保存用户后,您将运行:
$user->schools()->attach($gebruiker->school_id);
然后,获取刚刚添加到 school_user 数据透视表中的条目的 ID:
$school_user_id = $user->schools()->wherePivot('school_id', $gebruiker->school_id)->first()->pivot->id;
最后,附加用户和组,并设置 school_user id,以便您可以将其用作外键以允许级联删除:
$user->groups()->attach($gebruiker->groep_id, array('school_user_id' => $school_user_id));
<小时/>
更新 2:事实证明,您可以在保存用户时使用 sync
而不是 attach
来更新数据透视表(事实上,>should),只要将sync
的第二个属性设置为false
即可。这样做会禁用 sync
的分离行为,因此只会为该用户添加新的 school_user 连接,而不会删除其任何其他学校连接。
$user->schools()->sync([$gebruiker->school_id], false);
这样做的好处是它允许用户连接到多个学校,但可以防止数据透视表中同一 school_user 组合出现重复条目。通常,这种完整性检查对于数据透视表来说并不是一个大问题,因为分离会清除所有重复的条目。但是,由于您将在数据透视表和 group_user 表之间建立关系,并依赖于外键的级联删除,因此最好确保数据透视表尽可能保持干净。
关于php - 保存与多列的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528696/
我有两个具有不同格式的相似数据的数据框 df1: Nodo X Y Z CTB3901 CTBX3901 CTBY3901 CTBZ3901
这个问题在这里已经有了答案: Using tuples in SQL "IN" clause (9 个回答) 关闭 8 年前。 我尝试获得一些满足特定条件的用户: SELECT * FROM use
我目前正在使用 MySQL (5.7) 来查询成员表。 当我执行如下查询时: SELECT fname, lname, added FROM Members WHERE ((fname, lname)
我正在使用 CSS 创建多个列,以提供与 Pinterest 界面类似的外观(例如,框列,但整齐地堆叠在彼此之下)。 这是我使用的代码: #feed-post-home .feed { -mo
我正在使用 VLookup 函数来查找列中存在的多个值。这工作得很好,但只需要很多时间,因为我在 Excel 表中有 100,000 行。 有什么办法可以加快这段代码的速度吗? 该代码基本上在列中查找
如果这个词正确的话,我有 4 列和 4 个不同的参数。每个参数大约有 3-5 个变量。我想做的是在维护不同列的同时创建 4 个不同参数的所有可能组合。因此,假设我有以下示例: **Column A |
我正在尝试使用 arrange_()使用字符串输入并按降序排列在其中一列中。 library(dplyr) # R version 3.3.0 (2016-05-03) , dplyr_0.4.3 #
我只是想知道是否有可以包含多列的 wpf 组合框控件? 如果没有,我需要使用什么 XAML 来实现这一目标? 如果可能的话,我只是在寻找一个基本的两列组合框, 谢谢 最佳答案 请引用这些链接 多列组合
我想使用 Select 根据第二个表中的值更新表中的多个列语句来获取这样的值: UPDATE tbl1 SET (col1, col2, col3) = (SELECT colA, colB, col
如果我们需要根据给定列的某些值集查询表,我们可以简单地使用 IN 子句。 但是如果需要基于多列执行查询,我们不能使用 IN 子句(在 SO 线程中 grepped)。 从其他 SO 线程,我们可以使用
我需要用分隔值拆分表中两列的值。 我的源表如下所示: 产品IDean_upc已批准21029618710103368021;8710103368038;87101033680141;0;1929236
我正在尝试在 WPF 中创建一个包含多列的 TreeView 。我很清楚,关于这个主题确实有很多问题。但是,他们在绑定(bind)数据时似乎采用了不同的方法。每个人似乎都设置了 itemssource
我正在尝试使用以下数据在 Excel 中创建数据透视表: 我试图得出的最终结果(使用枢轴)是这样的摘要: 但是我不知道如何让 Excel 计算/添加/考虑所有列。我可以为每个单独的字段/列创建一个数据
我正在尝试在 WPF 中创建一个包含多列的 TreeView 。我很清楚,关于这个主题确实有很多问题。但是,他们在绑定(bind)数据时似乎采用了不同的方法。每个人似乎都设置了 itemssource
如何在最多几列的每行返回 1 个值: 表名 [Number, Date1, Date2, Date3, Cost] 我需要返回这样的东西: [Number, Most_Recent_Date, Cos
我有两个数据框想要连接在一起(自行车骑行数据框和自行车站数据框)。 我一直在使用 pandas 库,但我似乎无法编写代码来完美地操作连接。最初,我只是加入关键“station_id”,但我发现最近更新
我有以下 csv 文件,我想要内部联接 CSV 1:Trip_Data.csv (250MB) head -2 rand_trip_data_1.csv medallion,hack_license,
我知道以前也有人问过类似的问题。但是,我的问题略有不同。我正在尝试跨多个列获取 merge_asof 的功能。这是数据集: import pandas as pd left = pd.DataFram
我有一个数据库,里面保存着客户的数据。我需要知道我们在各个城市和国家有多少客户。我必须用单个查询来完成它。 我的表是客户,我有城市和国家列(均为varchar),其中包含有关它的信息。 所需的查询输出
我需要左连接两个表:Cardealers 和Applications。 我想查看哪些信用卡经销商收到了哪些申请。 每个申请都会转发给三个发卡商,因此我的表结构具有以下 3 列:receiver_1、r
我是一名优秀的程序员,十分优秀!