laravel - 如果同时指定了两个键,Eloquent hasOne 与belongsTo 会退化为相同的函数吗?

标签 laravel laravel-4 eloquent

对于一对一关系的情况,如果我在方法调用中完全指定key,hasOne有区别吗?和 belongsTo关系?或者,如果我使用 hasOne,换一种方式问在关系的双方,结果会一样吗?

最佳答案

是的,它在某些情况下可以指定键并使关系起作用。在某些情况下,我的意思主要是 检索结果。下面是一个例子:

D B

users                profiles
-----                --------
id                   id
etc...               user_id
                     etc...

楷模

hasOne 使用“错误”关系两次
class User extends Eloquent {
    public function profile(){
        return $this->hasOne('Profile');
    }
}

class Profile extends Eloquent {
    public function user(){
        return $this->hasOne('User', 'id', 'user_id');
    }
}

查询

假设我们想从某个配置文件中获取用户
$profile = Profile::find(1);
$user = $profile->user;

这是有效的。但它并没有像它应该的那样工作。它将处理 users 的主键就像一个引用 user_id 的外键在 profiles .

虽然这可能有效,但在使用更复杂的关系方法时会遇到麻烦。

例如 associate :
$user = User::find(1);
$profile = Profile::find(2);
$profile->user()->associate($user);
$profile->save();

该调用将抛出异常,因为 HasOne没有方法associate . ( BelongsTo 有)

结论

belongsTohasOne在某些情况下可能表现相似。他们显然不是。与关系的更复杂的交互将不起作用,从语义的角度来看这是无稽之谈。

关于laravel - 如果同时指定了两个键,Eloquent hasOne 与belongsTo 会退化为相同的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150925/

相关文章:

拉拉维尔。在具有关系的模型中使用scope()

php - Laravel 聚合 eloquent 最大结果

php - Laravel Eloquent : how to select datas from a relation in a collection or change their names before being turned into JSON?

php - Laravel 默认身份验证 - 添加字段会破坏登录能力

php - 无法在 Laravel 5.1.4 中的所有 View 之间共享变量?

php - 如何使用 <select> 标记中的嵌套项目列表来减少数据库查询量?

laravel - 使用 HTML Helper 创建图像链接

Laravel Eloquent : with query parameters

php - 向查询添加排除项。拉拉维尔 4

database - 处理涉及枢轴的范围的正确方法