Почему Model :: all () будет работать, а не Model :: find ($ id)? - PullRequest
0 голосов
/ 01 октября 2018

Я использую Eloquent в Laravel.У меня есть базовый контроллер и модель, и я делаю это в своем контроллере:

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'
    ];
}

А вот таблица, если она поможет: Таблица

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

ОК, я все испортил ... Я понял после комментирования функции _callStatic() в модели при добавлении ее к вопросу (спасибо @JonasStaudenmeir), что я никогда не возвращал parent::_callStatic().Я забыл, что это было даже там, потому что я не использую его сейчас.

Спасибо всем за вашу помощь, у меня недостаточно представителя, чтобы голосовать за ваши комментарии, но спасибо.

Я не уверен, почему все () все еще работает, но не где () и не найти ().

0 голосов
/ 01 октября 2018

Если вы хотите использовать метод find (), таблица команды должна иметь первичное поле с именем "id"

Вы должны проверить, что с именем "id" это основное поле таблицы.Если это так, вам следует проверить, есть ли какие-либо данные в таблице со значением параметра $ id.

Если в вышеуказанных состояниях нет проблем, вы можете использовать метод внедрения модели вместо find () метод.

Пожалуйста, просмотрите следующий код;

// Маршрут

// 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');

// Контроллер

public function getTeam(Team $team)
{
        // The team parameter is the given Team model instance.
        // We can use directly 
        return response()->json($team);
}

Надеюсь на приведенные выше ответы помогутвы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...