繁体   English   中英

了解Laravel中的hasOne()和belongsTo()函数

[英]Understanding hasOne() and belongsTo() functions in Laravel

我所要做的就是了解我应该何时使用hasOne()以及何时应该使用belongsTo() 两者看起来都和我一样。 例如,这是我的模型:

use Illuminate\Database\Eloquent\Model;
use App\Categories;
use App\User;


class tickets extends Model
{
    protected $table = "tickets";

    public function category()
    {
        return $this->hasOne(Categories::class, 'id', 'category_id');
    }

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

我也可以通过使用belongsTo()函数来做同样的事情。 我应该将它们放入usercategory模型中。 无论如何,我什么时候应该使用hasOne()belongsTo()

处理1对多关系时,您将拥有hasMany()belongsTo()

我使用的经验法则是,如果一个表有一个外键(票证表有一个user_id fk),那么这个模型belongsTo用户。 与分类相同。

所以上面的例子, Ticket belongsTo UserCategory

相反, User hasMany Ticket和类似的Category hasMany Ticket

无论如何,我什么时候应该使用hasOne()或belongsTo()?

认为它像什么是hasMany如果有一对多的关系在未来可能的。 例如:考虑用户和手机型号。 关系的性质将是User hasOne Phone,但如果您想扩展其功能,那么用户可以注册多个电话号码用户仍然has*关系,而Phone将保持belongsTo关系。 只考虑哪一个可以是“父”实体,并且一个应该在方法中具有hasOne关系。 我总是将User视为父实体,对我来说逻辑上是用户有一张票。 此外,尝试坚持使用Eloquent / Laravel / artisan命名约定并命名模型Ticket和其他一个Category (Eloquent和Laravel将在需要时解析复数,即表名)。

这些是相同的,只有一个区别。 两者都返回单个关联对象,但有一个区别。 当我们将某个关系声明为belongsTo时,它意味着有一个数据库表,其中包含某个其他表的外键。 当我们声明hasOne关系时,它意味着该表的主键已在另一个表中引用。 将其视为父子表。 当我们制作子表时,我们将每个孩子引用给它的父母,对吗? 这是属于 当我们创建父表时,我们知道父表中的每个条目在子表中都可以有一个或多个条目。 这是hasOne的hasMany关系。 如果您需要进一步澄清,可以进一步询问。

hasOne是1:1或一对一的关系。

hasMany是1:n或一对多关系。

belongsTo中的belongsTo方法用于定义这些关系的反转

这些的定义取决于您的数据模型。

在你的情况下:

你有一个Category模型,它有许多hasMany Ticket

您还有一个User模型,其中包含许多hasMany Ticket

现在从Ticket角度来看,您需要定义这两个hasMany关系的反转。 您将通过定义belongsTo来完成此belongsTo

因此Ticket belongsTo一个User并且belongsTo一个Category


回答你的问题:

Ticket的角度来看,它一个1:1的关系,因为Ticket模型中的外键指向1 User,类别外键指向1 Category。

但是,由于您所创建的关系是1:N(一到多),你还定义它的用户和类别车型,你应该定义在您的机票模型这些关系的的关系,以及逆一个hasMany(和hasOne)是belongsTo

在Laravel中定义关系时,请记住数据库模式,并以与数据库模式中存在的关系相同的方式定义关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM