【问题标题】:Laravel Invalid argument supplied for foreachLaravel 为 foreach 提供的参数无效
【发布时间】:2018-12-09 22:51:45
【问题描述】:

模范医生

class Doctor extends Model
{
    public function addresses() {
        return $this->belongsTo(Doctor::class);
    }
}

型号地址

 class Address extends Model
    {
      public function doctors() {
          return $this->hasMany(Address::class);
      }
    }

医生控制器

class DoctorsController extends Controller
{
    public function index()
    {
        $doctors = Doctor::with('addresses')->get();

        return view('doctors.index',compact('doctors'));
    }
}

刀片

@foreach($doctors as $doctor)
    {{ $doctor->name }}
    @foreach($doctor->addresses as $address)
        {{ $address->city }}
    @endforeach

@endforeach

我有一个错误

为 foreach() 提供的参数无效

我试图在 Doctor 和 Address 之间建立关系,但它不起作用。如果我尝试 dd($doctor->addresses) 我有 null。

【问题讨论】:

    标签: php laravel voyager


    【解决方案1】:

    您在关系中引用了同一个类(“Doctor 属于 Doctor”),这可能行不通。

    试试:

    class Doctor extends Model
    {
        public function addresses() {
            return $this->hasMany(Address::class);
        }
    }
     class Address extends Model
        {
          public function doctors() {
              return $this->belongsTo(Doctor::class);
          }
        }
    

    【讨论】:

    • 现在我有“SQLSTATE[42S22]: Column not found: 1054 Unknown column 'addresses.doctor_id' in 'where 子句' (SQL: select * from addresses where addresses.doctor_id in
    • 那么,addresses 表的结构是什么? Laravel 只是假设 FK 被命名为CLASS_id,所以它“猜测”doctor_id。如果是其他内容,您需要使用hasMany 的第二个参数来提供,例如:$this->hasMany(Address::class, 'id_of_doctor') - 另请参阅laravel.com/docs/5.6/eloquent-relationships 中的“一对多”部分
    【解决方案2】:

    一个医生有很多地址,一个地址有很多医生,这有意义吗?根据您的模型,您确实在医生和地址之间存在多对多关系?

    为什么不可以这样做。一个医生有很多地址?所以一对多的关系

    那么你的模型会是这样的。

    医生模型

    class Doctor extends Model
    {
        public function addresses() {
            return $this->hasMany('App\Address','DoctorId');// you need to indicate the foreign key if you didn't follow the laravel naming convention
        }
    }
    

    地址模型

    class Address extends Model
    {
        public function doctor() {
            return $this->hasOne('App\Doctor','DoctorId');// you need to indicate the foriegn key if you didn't follow the Laravel naming convention
          }
    }
    

    你的控制者

    class DoctorsController extends Controller
    {
        public function index()
        {
            $doctors = Doctor::all();//or Doctor::where('something','=','value')->get();
    
            return view('doctors.index',compact('doctors'));
        }
    }
    

    你的看法

    @foreach($doctors as $doctor)
        {{ $doctor->name }}
        @foreach($doctor->addresses as $address)
            {{ $address->city }}
        @endforeach
    
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 2022-01-27
      • 2018-02-26
      • 2017-11-26
      • 2021-12-25
      • 2019-10-05
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多