2017-03-27 14 views
0

ログインしているユーザと仕事に参加したいイベントとの関係を作る際に問題があります。 私は実際にロールのユーザーと同様のことをするために多くのステップを踏んでいます。しかし、ここで私はユーザがモデルユーザを使用しているので、イベントはモデルHomeModelと3つの他のモデルを使用してテーブルSaveEventに関係を結ぶため、いくつかの問題があります。 私のコードがあります。Laravel 5.4関係does not work第2パラメータを添付しない

モデルHomeModel

<?php 
 

 
namespace App; 
 

 
use Illuminate\Database\Eloquent\Model; 
 

 
class HomeModel extends Model 
 
{ 
 
    protected $table = 'events'; // you may change this to your name table 
 
\t public $timestamps = true; // set true if you are using created_at and updated_at 
 
\t protected $primaryKey = 'id'; // the default is id 
 
     
 
     /** 
 
    * Is it an all day event? 
 
    * 
 
    * @return bool 
 
    */ 
 
    public function isAllDay() 
 
    { 
 
     return (bool)$this->day; 
 
    } 
 
    
 
    
 
}

モデルユーザー

:私は私の問題を解決するために2日間を無駄にしているため、誰かがどのようにそれを把握するために私に言うことを願って

<?php 
 

 
namespace App; 
 

 
use Illuminate\Notifications\Notifiable; 
 
use Illuminate\Foundation\Auth\User as Authenticatable; 
 

 
class User extends Authenticatable 
 
{ 
 
    use Notifiable; 
 
    /** 
 
    * The attributes that are mass assignable. 
 
    * 
 
    * @var array 
 
    */ 
 
    protected $fillable = [ 
 
     'lastname', 'name', 'phonenumber', 'email', 'password', 'user_id' , 
 
    ]; 
 
    /** 
 
    * The attributes that should be hidden for arrays. 
 
    * 
 
    * @var array 
 
    */ 
 
    protected $hidden = [ 
 
     'password', 'remember_token', 
 
    ]; 
 
    
 
     public function roles() 
 
    { 
 
     return $this->belongsToMany('App\Role', 'user_role', 'user_id', 'role_id'); 
 
    } 
 

 
    public function hasAnyRole($roles) 
 
    { 
 
     if (is_array($roles)) { 
 
      foreach ($roles as $role) { 
 
       if ($this->hasRole($role)) { 
 
        return true; 
 
       } 
 
      } 
 
     } else { 
 
      if ($this->hasRole($roles)) { 
 
       return true; 
 
      } 
 
     } 
 
     return false; 
 
    } 
 
    
 
    public function hasRole($role) 
 
    { 
 
     if ($this->roles()->where('name', $role)->first()) { 
 
      return true; 
 
     } 
 
     return false; 
 
    } 
 
    public function events() 
 
    { 
 
     return $this->belongsToMany('App\SaveEvent')->withTimestamps(); 
 
    } 
 
}
関係

+------------+------------------+------+-----+---------+----------------+ 
 
| Field  | Type    | Null | Key | Default | Extra   | 
 
+------------+------------------+------+-----+---------+----------------+ 
 
| id   | int(10) unsigned | NO | PRI | NULL | auto_increment | 
 
| created_at | timestamp  | YES |  | NULL |    | 
 
| updated_at | timestamp  | YES |  | NULL |    | 
 
| users_id | int(10) unsigned | NO | MUL | NULL |    | 
 
| events_id | int(10) unsigned | NO | MUL | NULL |    | 
 
+------------+------------------+------+-----+---------+----------------+
から

モデルSaveEvent

<?php 
 

 
namespace App; 
 

 
use Illuminate\Database\Eloquent\Model; 
 

 
class SaveEvent extends Model 
 
{ 
 
\t 
 
    public function users() 
 
    { 
 
     
 
     return $this->belongsToMany('App\User'); 
 
    } 
 
}

コントローラZapisController

public function acceptEvent($id) 
 
     { 
 
    
 
     $events_id = HomeModel::find($id); 
 
     $users_id = new SaveEvent; 
 
     $users_id->users_id=Auth::id(); 
 
     $users_id->save(); 
 
     $users_id->events()->attach($events_id); 
 

 
     return redirect()->back(); 
 
     }

+0

を使用することができます:$ users_idがSaveEventのインスタンスであるため、$ users_id-> events()を参照してください。 – Indra

+0

これはホメモデルですが、ホメモデルはイベント用のテーブルを使用していますが、これはどのようにアタッチするのかわかりません – Mariusz

+1

は 'HomeModel'イベントですか?あなたのクラスはそうだと思われるが、それは意味をなさない。あなたがしていることを人々が理解できるように、分かりやすい名前を使用してください。いずれにせよhttps://laravel.com/docs/5。4 /雄弁な関係多面的な関係は助けになるかもしれない – apokryfos

答えて

0

あなたはeventsを保存するためのモデルを必要としません。これは多対多の関係で、ピボットテーブルを使用します。

変更するには、このようなUserモデルでevent方法:

public function events() 
    { 
     return $this->belongsToMany(HomeModel::class,'PIVOT_TABLE_NAME','user_id','events_id');->withTimestamps(); 
    } 

HomeModelで:

public function users() 
    { 
     return $this->belongsToMany(User::class,'PIVOT_TABLE_NAME','events_id','user_id'); 
    } 

今はSaveEventにイベント関係はので、これは動作しないことができるありません$user->events->attach($events_id);

+0

まだ私はこのエラーを持っています:SQLSTATE [フィールド 'events_id'にはデフォルト値がありません(SQL:save_events( 'users_id'、' updated_at'、 'created_at')の値に挿入してください(3,201-03-27 11: 19:50、2017-03-27 11:19:50)) – Mariusz

+0

それはまだcantのようにそれはdoesnt見つけるevent_id列を見つける – Mariusz

+0

あなたはuser_id変数ではないユーザーモデルを使用する必要がありますを忘れないでください – Saman