【发布时间】:2021-01-20 00:26:36
【问题描述】:
我的 laravel(7.23.0) 控制器中有一些重复的代码
use App\ModelA;
use App\ModelB;
use App\ModelC;
use App\Traits\DbTrait;
class DarsController extends Controller
{
use DbTrait;
public function A($id) {
return ModelA::where('column', $id)->get(*);
}
public function B($id) {
return ModelB::where('column', $id)->get(*);
}
public function C($id){
return ModelC::where('column', $id)->get(*);
}
//the only difference in these codes is model, all codes are the same
}
我创建了一个名为 Traits 的文件夹,并在其中定义了一个 trait DbTrait.php
<?php
namespace App\Traits;
trait DbTrait
{
public function getAllz($ModelName , $id){
return $ModelName::where('column', $id)->get('*');
}
}
所以我将控制器的功能修改为这个
public function A($id) {
// return ModelA::where('column', $id)->get(*); works fine
$this->getAllz('ModelA', $id);// throws an error
}
它会抛出错误消息:“找不到类‘ModelA’”
谢谢
更新: 我应该道歉,我真的很抱歉,答案中的 3 个有效,我在网络选项卡中看到了数据,我正在使用 vue 显示数据, 我认为使用 trait 制作了一个复杂的数组
这是我的简单 vue
axios.get('/api/emla/' + id).then(response =>{
this.data = JSON.parse(JSON.stringify(response.data));
}
【问题讨论】:
-
因为它在你的特征目录中寻找
ModelA类 -
app( '\App\' . $ModelName )::where('column', $id)->get('*'); -
谢谢@swadha 可以请你详细说明一下,我不能只是复制和粘贴你的代码
-
您尝试过什么调试问题?为什么不使用完整的类名(包括命名空间)?
-
@Nico 怎么样?对不起,我是新手
标签: php laravel eloquent vuejs2