Laravel中如何将Course模型的hasMany关联对应模型整理为数组
实现方法
根据你提供的Course模型中的hasMany关联方法,整理出对应模型类的数组非常简单:
如果只需要示例中的前两个模型,直接写:
$hasMany = [ CourseModule::class, CourseLesson::class ];
如果需要包含全部三个关联对应的模型,补充上CourseContent即可:
$hasMany = [ CourseModule::class, CourseLesson::class, CourseContent::class ];
要是想自动提取模型中所有hasMany关联的模型类,避免手动维护数组的麻烦,可以用PHP反射实现:
use ReflectionClass; use App\Models\Course; // 替换为你的Course模型实际命名空间 $courseReflect = new ReflectionClass(Course::class); $hasManyModels = []; foreach ($courseReflect->getMethods() as $method) { $methodBody = $method->getBody(); // 筛选出包含hasMany的关联方法 if (str_contains($methodBody, '$this->hasMany')) { // 匹配出关联的模型类名 if (preg_match('/hasMany\((.*?)::class/', $methodBody, $matches)) { $hasManyModels[] = $matches[1]::class; } } } // 最终$hasManyModels数组内就是所有hasMany关联对应的模型类
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

