为什么Model :: all()可以工作,而Model :: find($ id)不能工作?

时间:2018-10-01 12:09:24

标签: php laravel eloquent

我在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

2 个答案:

答案 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()。