получил странный сценарий и собираюсь изо всех сил объяснить его, я в основном объединяю две отдельные системы, которые очень похожи, но используют разные имена столбцов.
Итак, tablea имеет one tableb , однако tableb выбирается с использованием столбца id_1
или id_2
.
Эта проверка выполняется в локальной области при непосредственном использовании модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Tableb extends Model
{
protected $table = 'tableb';
public function scopeMode(Builder $query, $id)
{
if (env('DEMO_MODE')) {
return $query->where('id1', '=', $id);
}
return $query->where('id2', '=', $id);
}
}
Таким образом, для использования вышеупомянутой модели работает нормально:
Tablea::mode()->first();
Тем не менее, использование этого в отношениях тогда имеет проблемы, так как имя связанного столбца может измениться, поэтому я должен сделать ту же логику в этом отношении, но я хочу сделать всю эту логику в одном месте (таблицаb), чтобы избежать делать это в других отношениях:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tablea extends Model
{
public function Tableb()
{
if (env('DEMO_MODE')) {
return $this->hasOne(Tableb::class, 'id2', 'tableb_id');
}
return $this->hasOne(Tableb::class, 'id1', 'tableb_id');
}
}
Идеи