どんな体も私との間の主な違いを教えてもらえますか
BelongsToおよびHasOne雄弁の関係。
BelongsToはHasOneの逆です。
BelongsToメソッドを使用して、hasOne関係の逆を定義できます。
User
およびPhone
モデルの簡単な例を見てみましょう。
ユーザーから電話へのhasOne関係を提供しています。
class User extends Model
{
/**
* Get the phone record associated with the user.
*/
public function phone()
{
return $this->hasOne('App\Phone');
}
}
この関係を使用して、ユーザーモデルを使用して電話モデルデータを取得できます。
ただし、HasOneを使用した逆プロセスでは不可能です。電話モデルを使用したAccess Userモデルと同様。
電話を使用してユーザーモデルにアクセスする場合は、電話モデルにBelongsToを追加する必要があります。
class Phone extends Model
{
/**
* Get the user that owns the phone.
*/
public function user()
{
return $this->belongsTo('App\User');
}
}
詳細については、この link を参照してください。
主な違いは、関係のどちらの側が関係の外部キーを保持するかです。 $this->belongsTo()
を呼び出すモデルは、one-to-one
およびmany-to-one
関係の所有モデルであり、所有モデルのキーを保持します。
例1対1関係:
class User extends Model {
public function car() {
// user has at maximum one car,
// so $user->car will return a single model
return $this->hasOne('Car');
}
}
class Car extends Model {
public function owner() {
// cars table has owner_id field that stores id of related user model
return $this->belongsTo('User');
}
}
例1対多関係:
class User extends Model {
public function phoneNumbers() {
// user can have multiple phone numbers,
// so $user->phoneNumbers will return a collection of models
return $this->hasMany('PhoneNumber');
}
}
class PhoneNumber extends Model {
public function owner() {
// phone_numbers table has owner_id field that stores id of related user model
return $this->belongsTo('User');
}
}
1対1の関係:ユーザーは、1つの(hasOne)プロファイルを持つことができます。そしてもちろん逆も当てはまります。プロファイル(belongsTo)ユーザー。ユーザーは複数のプロファイルを持つことはできず、プロファイルは複数のユーザーに属することはできません。
2つのテーブル間で1対1の関係を作成する場合、最初に「hasOne」関係を作成する必要があります。逆のテーブル関係を作成する場合は、「「所属」...この1対多(逆)について知りたい場合は、関係に属します。
投稿のすべてのコメントにアクセスできるようになったので、コメントが親投稿にアクセスできるように関係を定義しましょう。 hasMany関係の逆を定義するには、belongsTo
メソッドを呼び出す子モデルで関係関数を定義します。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
/**
* Get the post that owns the comment.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
ここでは、良い例とBelongsToとHasOneの関係がeloquentでどのような違いがあるかを見ることができます。
Eloquent Relationships Cheat Sheet by Mahmoud Zalthttps://link.medium.com/9lj9BAG8lR