В laravel появилась следующая ошибка SQLSTATE[42S22]: Column not found: 1054 Unknown col
Я сделал связь между двумя таблицами "один к одному". Пытаюсь получить значение связанной таблицы, но выходит ошибка:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'wards.santa_id' in 'where clause' (SQL: select * from
wardswherewards.santa_id= 1 andwards.santa_idis not null limit 1)
//Router
Route::get('/', function () {
$santa = App\Models\Santa::all();
foreach($santa as $row){
echo "$row".'<br>';
foreach($row->wards as $ward)
{
echo $ward['name'];
}
}
});
Миграции
public function up()
{
Schema::create('santas', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('ward_id')->nullable();
$table->foreign('ward_id')->references('id')->on('wards')->nullOnDelete();
$table->timestamps();
});
}
public function up()
{
Schema::create('wards', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
Модель SANTA:
class Santa extends Model
{
use HasFactory;
public function wards()
{
return $this->hasOne(Ward::class);
}
}
Буду рад любой помощи)
Ответы (1 шт):
Автор решения: Anton Mironov
→ Ссылка
У вас в модели Santa определен родитель из модели Ward. Правильно будет так:
class Santa extends Model
{
public function ward()
{
return $this->belongsTo(Ward::class);
}
}
А уже в Ward если хотите, можете определить HasOne:
class Ward extends Model
{
public function santa()
{
return $this->hasOne(Santa::class);
}
}
Т.к. отношение один-к-одному, вам не нужен второй foreach для вывода:
$santa = App\Models\Santa::all();
foreach($santa as $row){
echo $row->ward->name;
}