Laravel 5.7, как передать запрос контроллера в модель и сохранить - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь передать $request от функции в контроллере к функции в модели.

Это моя функция контроллера:

PostController.php

public function store(Request $request, post $post)
{

    $post->title = $request->title;
    $post->description = $request->description;

    $post->save();

    return redirect(route('post.index'));

}

как сохранить данные в модели Post.php?

Я хочу, чтобы контроллер был только в роли отправки информации.Информация отправляется на модель.Все расчеты и хранение выполняются в модели

Спасибо

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Вы можете сделать это еще проще.У Laravel есть свой собственный помощник "request ()", который можно вызывать в любом месте вашего кода.

Итак, как правило, вы можете сделать это:

PostController.php

    public function store()
    {
        $post_model = new Post;
        // for queries it's better to use transactions to handle errors
        \DB::beginTransaction();
        try {
           $post_model->postStore();
           \DB::commit(); // if there was no errors, your query will be executed
        } catch (\Exception $e) {
            \DB::rollback(); // either it won't execute any statements and rollback your database to previous state
            abort(500);
        }
        // you don't need any if statements anymore. If you're here, it means all data has been saved successfully
        return redirect(route('post.index'));
    }

Post.php

    public function postStore()
    {
        $request = request(); //save helper result to variable, so it can be reused
        $this->title = $request->title;
        $this->description = $request->description;
        $this->save();
    }

Я покажу вам полный передовой опыт обновления и создания:

web.php

    Route::post('store/post/{post?}', 'PostController@post')->name('post.store');

yourform.blade.php - может использоваться для обновления и создания

    <form action='{{ route('post.store', ['post' => $post->id ?? null]))'>
       <!-- some inputs here -->
       <!-- some inputs here -->

    </form>

PostController.php

    public function update(Post $post) {
        // $post - if you sent null, in this variable will be 'new Post' result
        // either laravel will try to find id you provided in your view, like Post::findOrFail(1). Of course, if it can't, it'll abort(404)

        // then you can call your method postStore and it'll update or create for your new post.
        // anyway, I'd recommend you to do next

        \DB::beginTransaction();
        try {
          $post->fill(request()->all())->save();
          \DB::commit();
        } catch (\Exception $e) {
          \DB::rollback();
           abort(500);
        }
      return redirect(route('post.index'));
    }
0 голосов
/ 04 декабря 2018

Основываясь на описании, не уверен, что именно вы хотите, но при условии, что вы хотите чистый контроллер и модель.Вот один из способов

Модель - Пост

class Post {
    $fillable = array(
        'title', 'description'
    );
}

ПостКонтроллер

class PostController extend Controller {

    // store function normally don't get Casted Objects as `Post`
    function store(\Request $request) {

        $parameters = $request->all(); // get all your request data as an array

        $post = \Post::create($parameters); // create method expect an array of fields mentioned in $fillable and returns a save dinstance
        // OR
        $post = new \Post();
        $post->fill($parameters);
    }
}

Надеюсь, это поможет

0 голосов
/ 04 декабря 2018

Я найду, чтобы ответить на мой вопрос:

передать $request my_method в модели Post.php:

PostController.php:

    public function store(Request $request)
    {
        $post_model = new Post;
        $saved = $post_model->postStore($request);

        //$saved = response of my_method in model

        if($saved){
            return redirect(route('post.index'));
        }
    }

и сохранить данныев модели:

Post.php

мы можем вернуть экземпляр или логическое значение в контроллер.

Я вернул bool (ответ метода сохранения) в контроллер:

    public function postStore($request)
    {
        $this->title = $request->title;
        $this->description = $request->description;

        $saved = $this->save();

        //save method response bool

        return $saved;

    }

таким образом, все вычисления и хранение выполняются в модели (лучший способ сохранить данные в MVC)

0 голосов
/ 04 декабря 2018

Вам нужно создать новую модель, просто создав ее экземпляр:

$post = new Post;  //Post is your model

, затем поместить содержимое в запись

$post->title = $request->title;
$post->description = $request->description;

и, наконец, сохранить его в БД:

$post->save();

Чтобы сохранить все данные в модели, используя метод create. Вам нужно настроить массовые назначения при использовании create и задать столбцы в свойстве fillable в модели.

  protected $fillable = [ 'title', 'description' ];

, а затем вызвать его с помощью ввода

    $post = Post::create([ 'parametername'  => 'parametervalue' ]);

and if request has unwanted entries like token then us except on request before passing.

    $post = Post::create([ $request->except(['_token']) ]);

Надеюсь, это поможет.

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