

**現在の状況**

  1. Eloquentでの記述の場合に『user_idがnull』とエラーが出る。
  2. ログイン自体は成功しており、同ページで@if (Auth::check)を用いた文も正常に機能  
３.コメントアウトしている記述ならば問題なくテーブルに保存が行える。

なぜ現状のコードでは[user_id]が取得出来ないのでしょうか。  
どなたかご教授いただければ幸いです。

また、追記必要なファイルがあればコメントで指摘していただければ幸いです。

[![画像の説明をここに入力](https://i.stack.imgur.com/8mQNq.png)](https://i.stack.imgur.com/8mQNq.png)

[code]

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Facades\Auth;
    use App\Lost;
    
    class LostsController extends Controller
    {
        public function add(){
            $user = Auth::user();
    
            return view('lost.size_small',['user' => $user]);
        }
    
        public function store(Request $request) {
    
            $lost = new Lost;
            $form = $request->all();
            unset($form['_token']);
            $lost->fill($form)->save();
            return redirect('/');
    
            /*
            $lost = new Lost;
            $lost->user_id = $request->user()->id;
            $lost->pref = $request->pref;
            $lost->seed = $request->seed;
            $lost->image = $request->image;
            $lost->body = $request->body;
            $lost->save();
            return redirect('/select');
            */
        }
    }
    
[/code]


CC BY-SA 4.0
2019-12-06T10:04:42.830
61169
2019-12-06T16:26:11.810
2019-12-06T16:26:11.810
3060
36914
question
php laravel
Laravel Eloquentでuser_idが取得できない


コメントでも少し書きましたが、当然ながら`Request`はモデルではありません。  
`$request->all()`はリクエストのクエリとリクエスト本文のパラメータをまとめて返します。

とりあえず当該部分は以下に抜粋してみます。

<https://github.com/laravel/framework/blob/9abc0896070176fd6987d95f0d1b50de947db82c/src/Illuminate/Http/Concerns/InteractsWithInput.php#L179-L210>

[code]

        /**
         * Get the keys for all of the input and files.
         *
         * @return array
         */
        public function keys()
        {
            return array_merge(array_keys($this->input()), $this->files->keys());
        }
    
        /**
         * Get all of the input and files for the request.
         *
         * @param  array|mixed|null  $keys
         * @return array
         */
        public function all($keys = null)
        {
            $input = array_replace_recursive($this->input(), $this->allFiles());
    
            if (! $keys) {
                return $input;
            }
    
            $results = [];
    
            foreach (is_array($keys) ? $keys : func_get_args() as $key) {
                Arr::set($results, $key, Arr::get($input, $key));
            }
    
            return $results;
        }
    
[/code]

<https://github.com/laravel/framework/blob/9abc0896070176fd6987d95f0d1b50de947db82c/src/Illuminate/Http/Request.php#L359-L371>

[code]

        /**
         * Get the input source for the request.
         *
         * @return \Symfony\Component\HttpFoundation\ParameterBag
         */
        protected function getInputSource()
        {
            if ($this->isJson()) {
                return $this->json();
            }
    
            return in_array($this->getRealMethod(), ['GET', 'HEAD']) ? $this->query : $this->request;
        }
    
[/code]

一方、`$request->user()`はUserProviderを呼び出します。  
<https://github.com/laravel/framework/blob/9abc0896070176fd6987d95f0d1b50de947db82c/src/Illuminate/Http/Request.php#L509-L518>

[code]

        /**
         * Get the user making the request.
         *
         * @param  string|null  $guard
         * @return mixed
         */
        public function user($guard = null)
        {
            return call_user_func($this->getUserResolver(), $guard);
        }
    
[/code]

* * *

ですから、質問のようなコードでは当然ながら`user_id`はわたりません。  
Requestからユーザーを取得するにはコメントアウト部にあるよう`$request->user()`を使用します。  
もし、当該のbelongsToリレーションが設定されているのであれば、

[code]

    $lost->fill($form);
    $lost->user()->associate($user);
    $lost->save();
    
[/code]

あるいは

[code]

    $lost->fill($form)->user()->associate($user)->save();
    
[/code]

のように書くことすら可能です。

<https://readouble.com/laravel/6.x/ja/eloquent-relationships.html>


CC BY-SA 4.0
2019-12-06T16:07:42.470
61184
2019-12-06T16:07:42.470
2376
61169
answer