2016-10-01 105 views
0

我有我的多对多关系的以下表格:soldhomestests,taskssoldhomestest_task(作为数据透视表)。商店belongsTo与许多关系w /条件 - Laravel

我的soldhomestests表已经填充了数据。在创建满足我的soldhomestst表中的条件的新任务时,如何让我的soldhomestest_task数据透视表填充数据?在我的例子,我想存储当满足以下条件的关系数据:

'tasks.city' = 'soldhomestests.city' 
'tasks.address' = 'soldhomestests.address' 

我似乎无法找到如何与此进行任何文件?

机型:

class Task extends Model 
{ 
    protected $fillable = [ 
     'address', 'city', 'state', 
    ]; 

    public function user() 
    { 
     return $this->belongsTo(User::class); 
    } 

    public function soldhomestests() 
    { 
     return $this->belongsToMany('App\Soldhomestest'); 
    } 
} 

class Soldhomestest extends Model 
{ 

    public function tasks() 
    { 
     return $this->belongsToMany('App\Task'); 
    } 
} 

控制器:

public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'address' => 'required|max:255', 
      'city' => 'required|max:255', 
      'state' => 'required|max:255', 
     ]); 

     $request->user()->tasks()->create([ 
      'address' => $request->address, 
      'city' => $request->city, 
      'state' => $request->state, 
     ]); 

     return redirect()->route('settings.index'); 
    } 
+0

您可以使用雄辩事件。 https://laravel.com/docs/master/eloquent#events –

回答

0

不相信这是Laravel方式,但我使用where条件修改了我的控制器创建一个ID数组:

public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'address' => 'required|max:255', 
      'city' => 'required|max:255', 
      'state' => 'required|max:255', 
     ]); 

     $newtask = $request->user()->tasks()->create([ 
      'address' => $request->address, 
      'city' => $request->city, 
      'state' => $request->state, 
     ]); 

     $condition = DB::table('soldhomestests')->where([ 
      ['soldhomestests.address', '=', $request->address], 
      ['soldhomestests.city', '=', $request->city], 
      ])->pluck('id'); 

     $lastid = $newtask->id; 
     $tasksoldhome = Task::find($lastid); 
     $tasksoldhome->soldhomestests()->sync($condition); 

     return redirect()->route('settings.index'); 
    } 
0

使用雄辩,你可以这样做。

$task=new Task(); 
$task->city=$request->city; 
$task->address=$request->address; 
$task->save(); 

$soldhometests=Soldhometest::all(); 
foreach($soldhometests as $soldhometest) 
{ 
    if($task->city==$soldhometest->city && $task->address==$soldhometest->address) 
    {  
      $soldhometest_task=new SoldhometestTask(); // pivot model 
      $soldhometest_task->task_id=$task->id; 
      $soldhometest_task->soldhometest_id=$soldhometest->id; 
      $soldhometest_task->save(); 
    } 
}