簡體   English   中英

Laravel 與多個 eloquent 的關系

[英]Laravel Relationships with multiple eloquent

看起來我在關系部分需要一些幫助。例如,一個用戶的多個地址記錄保存在數據庫中。

看不到地址部分,我覺得eloquent有問題,但我不確定。

按照我的代碼:

user

id |    name       | lastname |
--- --------------  ----------   

1  | Rahuel        | lastnameRahuel
2  | Dalton Miller | lastnameDalton

adress

user_id | adress         
-------- ---------
1       | 740 Brown Greens Suite  
1       | 9906 Cleora Wall Apt.      
2       | 53977 Kip Center Apt

UserModel

 public function getAdress()
    {
        return $this->hasMany(Adress::class);
    }

AdressModel

 public function getUser()
    {
        return $this->belongsTo(User::class);
    }

UserController

$users = User::with('getAdress')->get();

        foreach ($users as $user){
            echo $user->name;
            echo $user->lastname;
            echo $user->adress;
        }

user_migration

public function up()
    {
        Schema::create('user', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('lastname');
        });
    }

adres_migration

Schema::create('adress', function (Blueprint $table) {
     $table->bigInteger('user_id')->unsigned();
     $table->string('adress');
     $table->foreign('user_id')->references('id')->on('user')->onDelete('cascade');

        });

1 用戶有多個地址,所以hasMany使用,它會返回一個地址列表。 所以你不能以$user->adress;

  1. 你可以遍歷$users->getAdress
  2. 您可以使用pluckjoin顯示逗號分隔的地址,如下所示。

$users = User::with('getAdress')->get();

        foreach ($users as $user){
            echo $user->name;
            echo $user->lastname;
            echo $user->getAdress ? $user->getAdress->pluck('adress')->join(',') : '';
        }

嘗試這樣的事情:

    $users = User::with('getLatestAdress')->get();

    foreach ($users as $user){
        echo $user->name;
        echo $user->lastname;
        echo $user->getLatestAddress->adress;
    }

因為您需要先調用關系名稱,然后再調用屬性。

更新:

由於關系getAddress返回一個數組,因此您可以設置一個新關系以指向要顯示的最新關系。

public function getLatestAdress()
    {
        return $this->hasOne(Adress::class)->latest();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM