Php 如何处理laravel中不需要外键字段且有时可能被忽略的关系

Php 如何处理laravel中不需要外键字段且有时可能被忽略的关系,php,mysql,laravel-4,eloquent,Php,Mysql,Laravel 4,Eloquent,请注意,我使用的是Mysql,其中外键字段中不允许使用null 假设有一个表,Users,包含字段name、mypic\u id、familypic\u id、carpic\u id和housepic\u id 还有一个表,用于为图像、图片和字段id、标题、文件名和路径创建索引 mypic_id、familypic_id、carpic_id和housepic_id字段可以在以后添加,也可以不为每个用户添加 每个*pic_id字段都通过用户模型中的hasOne(一个)与Pics记录相关 从User

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

假设有一个表,Users,包含字段name、mypic\u id、familypic\u id、carpic\u id和housepic\u id

还有一个表,用于为图像、图片和字段id、标题、文件名和路径创建索引

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

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

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


如何使用Eloquent/Laravel 4解决此问题?

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


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

我认为您不正确,MySQL外键字段中不能有空值。我正在使用MySQL和许多外键字段,它们定期存储空值。我建议您查看外部id字段的定义,看看是否已将其设置为NOTNULL。如果您将其改为默认值NULL,您应该准备好了。

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

与pics有1-Many关系,并且在pics表上有pictureType字段。然后,您可以将作用域添加到pictures类中,并获得所需的确切范围

DB结构

使用者

身份证,姓名

照片

id、用户id、picData、类型(枚举或指向另一个表的链接)

文件

您的Users.php将具有以下关系

public function pics()
{
    return $this->hasMany('pics',users_id);
}
在Pics.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();

这是可行的,但不幸的是,这对这个项目来说是不可接受的,请欣赏我们的努力,尽管存在一些不一致之处:您说过这些关系可能会稍后设置,或者根本不设置,那么您如何使用外键约束来实现这一点呢?laravel/Elount是否无论如何都不能控制数据库中的关系呢,它不会对约束进行任何检查。我不认为您可以在创建新记录时不需要的字段中设置外键约束。