Laravel 使用变量作为名称调用模型 class

Laravel call a model class using a variable as its name

我刚开始使用 Laravel 队列,不知道在 Laravel

中是否不能这样做

而不是这样做有效...

$test1 = Test1::where('fieldname', $value)->exists();
$test2 = Test2::where('fieldname', $value)->exists();
$test3 = Test3::where('fieldname', $value)->exists();
$test4 = Test4::where('fieldname', $value)->exists();

我想创建一个模型 classes 和字段名的数组,然后遍历该数组...

$classes = [
    'Test1' => 'fieldname',
    'Test2' => 'fieldname',
    'Test3' => 'fieldname',
    'Test4' => 'fieldname',
];

foreach($classes as $class => $field) {
    $class::where($field, $groupid)->exists();
}

但是当我 运行 我的工作时,我收到以下消息并且它消失了

Class 'Test1' not found

我想在循环内做其他事情,这会大大减少我的代码并看起来更具可读性。

你能不能像我试过的那样使用变量调用 class?

这是我的代码

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use \App\Models\Test;

class ImportProductGroupCrm implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $product;
    public $tries = 1;

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        $classes = [
            'Test' => 'field-Name',
        ];

        foreach($classes as $class => $field) {
            $class::where($field, $groupid)->exists();
        }
    }
}

您必须指定整个 class 名称或使用 ::class:

$classes = [
    'App\Test1' => 'fieldname',
    Test1::class => 'fieldname',
];