У меня проблема с обновлением данных в сводные таблицы.
users[id->autoincrement,username,password,firstname,lastname,lga,email]
class User extends Eloquent
{
public function lga()
{
return $this->HasMany('LGA');
}
}
userslga[id->autoincrement,user_id,lga_id]public function user()
{
return $this->belongsTo('user');
}
public function lga()
{
return $this->belongsTo('lga');
}
lga[id->autoincrement,lg_name]
class LGA extends Eloquent
{
public function lga()
{
return $this->belongsTo('User');
}
}
When i tried querying relationship,like User::find($id)->lga i could not figure that out.but i eventually made it work using this:
$U_LGA = UserLga::where('user_id',$id)->lists('lga_id');
Теперь моя проблема в том, что я могу хранить данные в связанных таблицах из моего контроллера следующим образом:
if ($validation->passes())
{
$user = new User;
$user->email = Input::get('email');
$user->username = Input::get('username');
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->type = Input::get('type');
$user->phone = Input::get('phone');
$user->password = Hash::make(Input::get('password'));$user->save();
//save each users lga
foreach(Input::get('LGA') as $LGS)
{
$userlga = new UserLga;
$userlga->user_id = $user->id;
$userlga->lga_id = $LGS;
$userlga->save();
}
//end
return Redirect::to('/')->with('success','New user profile successfully created');
}
//return json error
return Response::json($validation->messages());
Но обновление будет проблемой, так как UserLga :: find ($ id) будет недействительным, потому что он такой же, как select из userlga, где id = $ id, где, как предполагается, обновляет всю строку, где user_id является текущим пользователем. id редактирую и добавляю дополнительные lga, если проверено больше lga.
Мне нужна помощь о том, как это сделать, я в замешательстве. Или я неправильно понял концепцию или запрос Eloquent Relationship, что я должен делать,
пожалуйста, кто-нибудь поможет?
РЕДАКТИРОВАТЬ
Я хотел бы запустить следующие запросы
UserLga::where('user_id',$uid)->lists('lga_id');
Я хотел бы сделать ниже, как лучше
$statement2 = "SELECT * FROM facility where LGA_id = '$fulga' ";
//loop through lga id to build query
foreach($LGA_id as $fax)
{
$statement2.= " "."OR"." "."LGA_id=". "'".$fax."'";
}
//FACILITY for User assigned LGA
$facility = DB::Select($statement2);
////////////////////////////////////////////////// /////////
// генерируем все lgaid, покрытые пользователем
////////////////////////////////////////////////// /////////////////////
$ulga = UserLga::where('user_id',$uid)->lists('lga_id');
//remove the first lgaid in array to build query and avoid repetition$sulga = array_shift($ulga);// query
$statement = "SELECT * FROM lga where id = '$sulga' ";
//loop through lga id to build query
foreach($ulga as $lga)
{
$statement.= " "."OR"." "."id=". "'".$lga."'";
}
//user assigned lga
$LGA = DB::Select($statement);
AM SORI ЭТО ОЧЕНЬ ЖЕСТКО, ЧТОБЫ Я ХОЧУ ДОБИТЬСЯ ЛУЧШЕ, ИСПОЛЬЗУЯ ОТВЕТ
Задача ещё не решена.
Других решений пока нет …