Laravel Modelname: find ($ id) или ModelName :: findorFail ($ id)? - PullRequest
0 голосов
/ 29 ноября 2018

Привет, я только начал использовать Laravel, прошел через какое-то учебное пособие и кое-что застрял: вот мой контроллер и модель:

namespace App\Http\Controllers;

use App\Message;
use Illuminate\Http\Request;

class MessageController extends Controller
{
  public function create(Request $request)
  {
    $message=new Message();
    $message->col1=$request->col1;
    $message->col2=$request->col2;
    $message->save();
    return redirect('/home');
  }
  public function vewrec($id)
  {
    $message=Message::findOrFail($id);
    return view('record',['message'=>$message]);
  }
}

и код модели:

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Message extends Model
  {
    protected$fillable=['col1','col2'];
  }

Должен ли я добавить что-то (методы) в модель (сообщение), чтобы найти идентификатор?если возможно, могу ли я попросить этот метод, который извлекает данные из базы данных и проверяет идентификатор?вернуть ноль или вернуть одну запись в качестве элемента массива?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Ваш код в порядке, но в вашей модели нет места между protected и переменной $fillable, поэтому, пожалуйста, исправьте его

protected $fillable=['col1','col2'];

Чтобы получить результаты в массиве, просто добавьте toArray() в свой eloquent

$message=Message::findOrFail($id)->toArray();

findorfail() выдаст ошибку, если запись не найдена, поэтому, если вы хотите вернуть ноль вместо ошибки, используйте find()

$message=Message::find($id)->toArray();
0 голосов
/ 29 ноября 2018

Код хороший, но в модели:

protected$fillable=['col1','col2'];

Просто восстановите его так:

protected $fillable=['col1', 'col2'];

Что касается публичной функции vewrec ($ id), она может вернуть ошибкуили вернуть элемент.Возможно, если вы не хотите, чтобы ошибка появлялась, используйте Model :: find ($ id).Надеюсь, это поможет.

0 голосов
/ 29 ноября 2018

Функция findOrFail вернет коллекцию.Если вам нужен массив, то вы можете использовать функцию toArray().

public function vewrec($id)
{
    $message=Message::findOrFail($id);
    if(count($message)!=0){
        $message = $message->toArray();
    }else{
        $message = NULL;
    }
    return view('record',compact('message'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...