【问题标题】:Laravel multiple belongsTo usersLaravel 多个属于用户
【发布时间】:2018-11-27 15:59:26
【问题描述】:

我正在尝试显示 Races + 参加比赛的人,我正在使用表关系,但我不确定我是否正确使用它。

查看:

@foreach($leagues->races as $race)
        <!-- ATTENDANCE track -->
        <div class="col s12 m6">
          <div class="card">
            <div class="card-image">
              <img src="{{ asset("img/tracks/.png") }}">
              <span class="card-title red attendance-track-box"><b>{{$race->event}}</b></span>
            </div>
            <div class="card-content attendance-content">
                <ul>
                  @foreach($race->attendances as $attendance)
                    @if($attendance->status == 1)
                      <li class="border-left-green">{{$attendance->user->username}}</li>
                    @elseif($attendance->status == 2)
                      <li class="border-left-red"></li>
                    @elseif($attendance->status == 3)
                      <li class="border-left-cyan"></li>
                    @endif
                  @endforeach
                </ul>
            </div>
            <div class="card-action">
              <a class="waves-effect waves-light btn green">Yes</a> <a class="waves-effect waves-light btn red">No</a> <a class="waves-effect waves-light btn">Maybe</a>
            </div>
          </div>
        </div>
        @endforeach

模型联赛:

class Leagues extends Model
{
    //
    public function teams(){
        return $this->hasMany('App\teams');
    }
    public function races(){
        return $this->hasMany('App\races');
    }
}

模型比赛:

class Races extends Model
{
    //
    public function attendances()
    {
        return $this->hasMany('App\attendances');
    }
}

模型驱动程序:(使用这个用于驱动程序列表)

class Drivers extends Model
{
    //
    public function user(){
        return $this->belongsTo('App\Users', 'users_id', 'id');
    }
}

模型考勤:

class attendances extends Model
{
    //
    public function user(){
        return $this->belongsTo('App\Users', 'users_id', 'id');
    }
}

模型用户

namespace App;

use Illuminate\Database\Eloquent\Model;

class Users extends Model
{
    //
}

我已经发布了 Drivers 模型,因为我还调用了 belongsTo。 基本上,我已经复制了代码,它适用于司机,但它不适用于出勤

我得到的错误:

试图获取非对象的属性“用户名”

用户.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'username', 'psn', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你的模型关系只是做相反的belongsTo。如果您想使用belongsTo,您的模型关系需要双向发展,但您的关系只会反过来。先用hasMany、hasOne等定义关系,再在其他模型中定义逆。

    示例驱动程序:

    class Drivers extends Model
    {
        public function user(){
            return $this->belongsTo('App\Users', 'users_id', 'id');
        }
    }
    

    出席示例:

    class attendances extends Model
    {
         public function user(){
             return $this->belongsTo('App\Users', 'users_id', 'id');
         }
    }
    

    示例用户:

    class Users extends Model
    {
         public function attendances()
         {
             return $this->hasMany('App\attendances');
         }
    
         public function drivers()
         {
             return $this->hasMany('App\Drivers');
         }
    }
    

    每个类都需要相互引用。一个用hasMany、hasOne 等来定义关系,另一个需要belongsTo 来定义逆关系。

    【讨论】:

    • 类不需要相互引用。您所指的是关系的倒数。 Users 模型上的 attendances() 关系仅在您需要访问给定用户出勤时才需要,但如果您想访问给定出勤的用户则不需要。 laravel.com/docs/5.6/eloquent-relationships#one-to-many
    • 是的,但他们只是在做相反的“属于”部分,这是行不通的。他们需要先使用 hasMany、hasOne 等定义关系,然后可选地使用逆。你不能反过来做。
    猜你喜欢
    • 2022-01-23
    • 2017-05-13
    • 1970-01-01
    • 2021-08-21
    • 2023-04-07
    • 1970-01-01
    • 2021-02-12
    • 2013-09-14
    相关资源
    最近更新 更多