###前提・実現したいこと
Laravelを使ってチャットアプリを使いたいと考えています。
・userは色々なgroupに入れたほうがいい。
・groupは複数のuserを登録出来た方がいい。
ということを考え、多対多のアソシエーションを組もうと思っています。
加えて
・Userのログイン機能があったほうがいい
とも考え認証機能Authを使おうと思っています。
###発生している問題・エラーメッセージ
多対多ということで
User.php(userモデル)を
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function groups(){ return $this->belongsToMany('App/Group','user_group')->withTimestamps(); } public function chats(){ return $this->hasMany('App/Chat'); } }
Group.php(Groupモデル)を
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Group extends Model { public function users(){ return $this->belongsToMany('App/User')->withTimestamps();; } public function chats(){ return $this->hasMany('App/Chat'); } }
ChatControllerのindexアクションにログイン後に飛ばしたいので、コントローラーにログイン状態をチェックする処理を書きました。
<?php namespace App\Http\Controllers; use App\Chat; use App\User; use App\Group; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class ChatController extends Controller { public function index(Request $request){ $user = Auth::user(); $chats = Chat::all(); return view('chat.index', ['chats' => $chats,'user' => $user]); } public function create(Request $request){ $chat = new Chat; $form = $request->all(); unset($form['_token']); $chat->fill($form)->save(); return redirect('/'); } }
そして
中間テーブルuser_groupを作りました。
すると
Type error: Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\User given, called in /var/www/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 380
というエラーが出ました。
###試したこと
https://github.com/jenssegers/laravel-mongodb/issues/702
上記のURLに書かれていた通りにコードを修正してみました
<?php namespace App; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Auth\Authenticatable as AuthenticableTrait; use Illuminate\Database\Eloquent\Model; class User extends \Eloquent implements Authenticatable { use AuthenticableTrait; public function groups(){ return $this->belongsToMany('App/Group')->withTimestamps();; } public function chats(){ return $this->hasMany('App/Chat'); } }
するとエラーが消えましたが、またログイン画面に戻ってしまいました。
それからは一向にログイン画面からトップページに向かうことが出来ません。
解決策を教えて頂けませんでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。