Php 作为轴承模型的雄辩多态性

Php 作为轴承模型的雄辩多态性,php,mysql,laravel,Php,Mysql,Laravel,我正在为我的网站制作警报,我决定使用警报模型作为轴承,而不仅仅是一个辅助表 警报是这样的 Schema::create('alarms', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('common_interval')->nullable(); $table->timestamps(); }); Schema::create

我正在为我的网站制作警报,我决定使用警报模型作为轴承,而不仅仅是一个辅助表

警报是这样的

Schema::create('alarms', function (Blueprint $table) {
  $table->id();
  $table->string('name');
  $table->integer('common_interval')->nullable();
  $table->timestamps();
});
Schema::create('alarmables', function (Blueprint $table) {
    $table->id();
    $table->foreignId('alarm_id');
    $table->nullableMorphs('alarmable');
    $table->date('date');
    $table->foreignId('machine_counter_id')->nullable();
    $table->date('next_date')->nullable();
    $table->integer('next_counter')->nullable();
    $table->text('note')->nullable();
    $table->nullableMorphs('executed_by');
    $table->foreignId('submitted_by');
    $table->timestamps();

    $table->foreign('alarm_id')
        ->references('id')
        ->on('alarms');

    $table->foreign('submitted_by')
        ->references('id')
        ->on('users')
        ->onDelete('set null');

    $table->foreign('machine_counter_id')
        ->references('id')
        ->on('machine_counters')
        ->onDelete('set null');
});
像这样的警告

Schema::create('alarms', function (Blueprint $table) {
  $table->id();
  $table->string('name');
  $table->integer('common_interval')->nullable();
  $table->timestamps();
});
Schema::create('alarmables', function (Blueprint $table) {
    $table->id();
    $table->foreignId('alarm_id');
    $table->nullableMorphs('alarmable');
    $table->date('date');
    $table->foreignId('machine_counter_id')->nullable();
    $table->date('next_date')->nullable();
    $table->integer('next_counter')->nullable();
    $table->text('note')->nullable();
    $table->nullableMorphs('executed_by');
    $table->foreignId('submitted_by');
    $table->timestamps();

    $table->foreign('alarm_id')
        ->references('id')
        ->on('alarms');

    $table->foreign('submitted_by')
        ->references('id')
        ->on('users')
        ->onDelete('set null');

    $table->foreign('machine_counter_id')
        ->references('id')
        ->on('machine_counters')
        ->onDelete('set null');
});
到目前为止,一切都很顺利

当我收到我的收藏品时

    public function index()
    {
        $alarmables = Alarmable::orderByDesc('date')->take(2000)->get();
        $alarms = Alarm::orderBy('name')->get();

        $alarmables = $alarmables->unique(function ($aa) {
            return $aa['alarm_id'].$aa['alarmable_type'].$aa['alarmable_id'];
        });

        $alarmables = $alarmables->sortBy('date');

        return view('alarmables.index', [
            'alarmables' => $alarmables,
            'alarms' => $alarms
        ]);
    }
我不能称之为危言耸听的关系

class Alarmable extends Model
{
    public function alarm()
    {
        return $this->belongsTo('App\Alarm');
    }

    public function alarmable()
    {
        return $this->morphToMany('App\Alarmable', 'alarmable');
        // return $this->morphedByMany('App\Alarmable', 'alarmable');
    }
}
从我的刀刃上

<td>{{ $aa->alarmable ? $aa->alarmable->name : '' }}</td>
有没有一个简单的方法来修复?我是否需要再使用一个模型,而不是对所有的东西都报警?

Alarmable()
方法应该如下所示:

class Alarmable extends Model
{
    public function alarm()
    {
        return $this->belongsTo('App\Alarm');
    }

    public function alarmable()
    {
        return $this->morphTo();
    }
}

因为我不是一个喜欢拉威尔的人——这能解决问题吗?我试着利用那里的知识,但是多态表有点复杂,所以目前为止运气不好。非常感谢!我正在浏览文档,现在我知道你从哪里获得了这些知识,但我无法将其扣除。