基本上,我正在进行ajax调用,要求Controller添加一定数量的" Artigo" (这意味着产品)到Actividade(这是一种文件)。
他们有多对多的关系。
行为应如下:
以下代码完美无缺,但它会运行额外的查询以获取更新的" Artigo"在返回JSON之前。
// Controller
public function ajaxAddArtigo() {
if(Request::ajax()) {
try {
$actividade = Actividade::find(Input::get('actividadeId')); // Actividade is something like a "Document"
$artigo = Artigo::find(Input::get('artigoId')); // Artigo is a product
$actividade->addArtigo($artigo, intval(Input::get('qtd'))); // "qtd" is quantity
// if quantity of the Artigo becomes 0, the Artigo is detached and this doesn't return the updated collection (with the Artigo now detached)
// if the Artigo doesn't exist and quantity is a positive value, the Artigo gets attached, but this still doesn't return the updated collection (with the new Artigo attached)
return Response::json($actividade->artigos);
//return Response::json(Actividade::find(Input::get('actividadeId'))->artigos); // i must do this to return the updated list :(
} catch (Exception $ex) {
}
}
}
// Model Actividade
public function addArtigo(Artigo $artigo, $quantidade = 1) {
if($this->auth() || $this->authColab()) {
$actArtigo = $this->artigos->first(function($i, $item) use($artigo) { // get the wanted Artigo from the related Artigo's (or not, if it doesn't exist)
return $item->id == $artigo->id;
});
if(count($actArtigo)) { // if it exists
if($actArtigo->pivot->quantidade + $quantidade >= 0) { // we will see the effect of summing the quantity (it can be a negative number)
if($actArtigo->pivot->quantidade + $quantidade == 0) { // if it becomes 0, detach it
$this->artigos()->detach($artigo->id);
} else { // if it becomes bigger than 0, just sum it
$actArtigo->pivot->quantidade += $quantidade;
}
}
} else { // if it doesn't exist, add a new one as long as quantity is a cool value
if($quantidade > 0) {
return $this->artigos()->attach($artigo, [
'utilizador_id' => Auth::user()->id,
'quantidade' => $quantidade
]);
}
}
}
}
有没有办法让Laravel在执行attach()
和detach()
时更新模型?
答案 0 :(得分:-1)
连接或分离后,请确保使用save()方法保存模型
否则任何更改或关系都将丢失