如何处理 Laravel 中不需要外键字段并且有时可能会被省略的关系


how to handle relationships in laravel where the foreign key field is not required and may sometimes be left out

请注意,我使用的是Mysql,其中外键字段中不允许使用null。

假设有一个表,用户,其中包含字段名称、mypic_id、familypic_id、carpic_id和housepic_id。

还有一个用于图像,图片的表格,其中包含字段id,标题,文件名和路径。

字段 mypic_id、familypic_id、carpic_id 和 housepic_id 可以在以后添加,也可以根本不为每个用户添加。

每个 *pic_id 字段都通过用户模型中的 hasOne(一一)与 Pics 记录相关

当我从"用户"表添加/更新记录时,出现以下错误:SQLSTATE[23000]:完整性约束冲突:1452 无法添加或更新子行:外键约束失败...

如何使用 Eloquent/Laravel 4 克服此问题?

我相信

您不正确,在MySQL外键字段中不能具有NULL 值。 我将MySQL与许多定期存储空值的外键字段一起使用。 我建议您查看外部 id 字段的定义,看看您是否已将其设置为 NOT NULL。 如果您将其更改为默认 NULL,您应该很高兴。

雄辩关系不需要数据库端的外键约束,因此您只需删除这些约束即可。

请注意,您必须担心更新/删除相关表中的条目,因为MySQL对此一无所知,并且您将无法在更新时,在删除操作上设置。

您需要提前计划,如果您将来要添加其他图片,最好现在就建立这种关系。

与图片有 1 - 许多关系,并且您的图片表上有 pictureType 字段。然后,您可以将范围添加到图片类并获取所需的确切范围。

数据库结构

用户

id, 姓名, ....

图片

id, users_id, picData, type(枚举或链接到另一个表), ...

文件

您的用户.php将具有以下关系

public function pics()
{
    return $this->hasMany('pics',users_id);
}

在您的图片中.php您可以添加关系和范围,例如

public function user()
{
    return $this->belongsTo('Users');
}
public function scopeType($query,$type)
{
    return $query->where('type', '=', $type);
}

这将允许您通过调用来获取您现在拥有的任何照片或任何未来的照片

User::find(1)->pics()->type('myPic')->get();