У меня возникают проблемы с вылетом ИКАО и ИКАО прибытия из таблицы расписаний. Ларавел продолжает давать мне ошибки, что мои отношения прищурены. Вот код.Яркие множественные внешние ключи из одной таблицы в двух столбцах
Schema::create('airports', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('city');
$table->string('country');
$table->string('iata');
$table->string('icao');
$table->double('lat');
$table->double('lon');
$table->longText('data')->nullable(); //JSON Data for All gate information for the system.
$table->softDeletes();
});
Schema::create('schedule_templates', function (Blueprint $table) {
$table->increments('id');
$table->string('code');
$table->string('flightnum');
$table->integer('depicao')->unsigned();
$table->foreign('depicao')->references('id')->on('airports')->onDelete('cascade');
$table->integer('arricao')->unsigned();
$table->foreign('arricao')->references('id')->on('airports')->onDelete('cascade');
$table->string('aircraft')->nullable();
$table->boolean('seasonal');
$table->date('startdate');
$table->date('enddate');
$table->time('deptime');
$table->time('arrtime');
$table->integer('type');
$table->boolean('enabled');
$table->text('defaults');
$table->timestamps();
$table->softDeletes();
});
Вот Модели
class ScheduleTemplate extends Model
{
public $table = "schedule_templates";
public function depicao()
{
return $this->hasOne('App\Models\Airport', 'depicao');
}
public function arricao()
{
return $this->hasOne('App\Models\Airport', 'arricao');
}
}
class Airport extends Model
{
//
public $timestamps = false;
public function schedules()
{
return $this->belongsToMany('App\ScheduleTemplate');
}
}
При попытке запроса, используя следующий код, я получаю ошибку
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'vaos_airports.depicao' in 'where clause' (SQL: select * from
vaos_airports
wherevaos_airports
.depicao
in (1))
$schedules = ScheduleTemplate::with('depicao')->with('arricao')->get();
Конечной целью является вывести результаты в таблицу. Вот этот код, если он заинтересован.
@foreach($schedules as $s)
<tr>
<td>{{$s->code}}</td>
<td>{{$s->flightnum}}</td>
<td>{{$s->depicao()->name}}</td>
<td>{{$s->arricao()->name}}</td>
<td>{{$s->aircraft}}</td>
<td>{{$s->seasonal}}</td>
<td>{{$s->type}}</td>
</tr>
@endforeach
EDIT:
Я исправил проблему отношения Видимо я их местами. Вот обновленные классы моделей
class ScheduleTemplate extends Model
{
public $table = "schedule_templates";
public function depicao()
{
return $this->belongsTo('App\Models\Airport', 'depicao');
}
public function arricao()
{
return $this->belongsTo('App\Models\Airport', 'arricao');
}
}
class Airport extends Model
{
//
public $timestamps = false;
public function schedules()
{
return $this->hasMany('App\ScheduleTemplate');
}
}
Ошибка теперь находится в файле вида. Я либо получить ошибку BelongsTo:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
или это, если у меня есть arricao или depicao без «()»
Trying to get property of non-object
Пробовал выше, а также мое редактирование. Получите эту ошибку с помощью своего решения –
> Неопределенное свойство: Illuminate \ Database \ Eloquent \ Relations \ HasOne :: $ name –
Проверено ваше обновление.Он возвращается без ошибок, но возвращается дважды из одной записи. У меня есть Portland International как отправление, так и прибытие (это означает, что он вытаскивает первую запись из базы данных без проверки идентификатора). Я собираюсь попробовать второй вариант. –