Не получается сделать связь "один ко многим" в laravel
Всем привет, делаю проект на laravel и у меня возникла проблема со связью "один ко многим".У меня есть две модели User и Company. Хочу сделать чтобы все данные из USER привязывались к одной компании из KOMPANY. Проблема в том, что следующий код выводит ошибку:
Property [users] does not exist on this collection instance.
Буду рад любой помощи!
<?php
$company = Company::all();
$users = User::all();
foreach($company->users as $row){
dd($row);
}
Что я сделал:
Модели:
// USER
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function companies() {
return $this->belongsTo(Company::class);
}
}
// COMPANY
class Company extends Model
{
use HasFactory;
protected $fillable = [
'company',
'email',
'logo',
'addres',
'points'
];
public function users()
{
return $this->hasMany(User::class);
}
}
Миграция:
// users
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->foreignId('company_id')->constrained()->onDelete('cascade');
$table->string('phoneNumber');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
Ответы (1 шт):
Ошибка означает, что полученная методом all коллекция, такого свойства не имеет. Что логично. Динамическое свой свойство users принадлежит экземпляру классa Company. То есть например такой код
$company1 = $companies[0];
foreach($company1->users as $user){}
Уже будет без ошибки. Конечно, при условии существования этих элементов. И к слову связь hasMany в вашем случае буквально означает - одна компания может принадлежать многим пользователям. Подумайте, возможно вы не это планировали.