我在Laravel中使用Eloquent。我有一个基本的控制器和模型,并且正在我的控制器中执行此操作:
class TeamController extends Controller
{
public function getTeam($id)
{
// $id is primary key
// echo $id displays 1
// id 1 exists in database
// Doesn't work, returns empty json object
return response()->json(Team::find($id));
// Works, returns all teams as expected
return response()->json(Team::all());
}
}
如代码注释中所述,Team::find($id)
返回一个空的Json对象,但是Team::all()
返回所有预期的值。
Team::where('name', 'Test Team')
也不起作用,即使它们在数据库中也是如此。
我已经看了一段时间了,但我必须错过一些简单的东西-有人对这里可能发生的事情有任何想法吗?
编辑:这是团队模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Team extends Model
{
protected $table = 'teams';
// public static function __callStatic($method, $args)
// {
// if ($method == 'findValidById') {
//
// $team = Team::find($args[0]);
//
// if ($team)
// {
// return $team;
// }
// throw new \Exception('The specified team does not exist', 400);
// }
// }
protected $casts = [
'admin_id' => 'int'
];
protected $fillable = [
'name',
'logo',
'admin_id',
'team_key'
];
}
这是表格,如果有帮助的话: Table
答案 0 :(得分:0)
如果要使用find()方法,则组表必须位于名为“ id”的主字段中
您应检查表上的主字段是否有名为“ id”的字段。如果存在,则应检查表中是否有任何值为$ id参数的数据。
如果以上状态没有任何问题,则可以使用模型注入方法代替find()方法。
请查看以下代码;
//路线
dict
//控制器
// The {team} parameter is primary id of team table. For need of a team data, the url must be following;
// domainn.com/get-team/1
Route::get('get-team/{team}', 'TeamController@getTeam')->name('get_team');
我希望以上回答对您有所帮助。
答案 1 :(得分:0)
好,我搞砸了...
在将模型中的_callStatic()
函数注释到问题中后,我意识到(永远感谢{JonasStaudenmeir)我从未返回过parent::_callStatic()
。我忘记了它甚至在那里,因为我现在不使用它。
谢谢大家的帮助,我没有足够的代表来投票支持您的评论,但谢谢。
我不确定为什么all()仍然可以工作,但不知道where()或find()。