web-dev-qa-db-ja.com

BelongsToとHasOneの違いは何ですかLaravel

どんな体も私との間の主な違いを教えてもらえますか
BelongsToおよびHasOne雄弁の関係。

21

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 を参照してください。

12
Ketav Chotaliya

主な違いは、関係のどちらの側が関係の外部キーを保持するかです。 $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'); 
  }
}
34
jedrzej.kurylo

1対1の関係:ユーザーは、1つの(hasOne)プロファイルを持つことができます。そしてもちろん逆も当てはまります。プロファイル(belongsTo)ユーザー。ユーザーは複数のプロファイルを持つことはできず、プロファイルは複数のユーザーに属することはできません。

3
Naresh Ramoliya

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');
    }
}
1

ここでは、良い例とBelongsToHasOneの関係がeloquentでどのような違いがあるかを見ることができます。

Eloquent Relationships Cheat Sheet by Mahmoud Zalthttps://link.medium.com/9lj9BAG8lR

0