删除该表行后,更新另一个表以指定laravel中的列

时间:2019-02-03 19:48:18

标签: laravel laravel-5

如下所示,我有两个表。

1.Posts Table(记录表的内外)

id  lecture_name    roomkey created_at  updated_at  user_id
1   Ee Vonne Ng     L02     2019-01-22  2019-02-03      1
2   Ee Vonne Ng     L03     2019-01-22  2019-01-23      1

2.key表(keynos)

id  roomkey status  created_at  updated_at
1   L01     0       2019-01-22  2019-02-04 
2   L02     1       2019-01-22  2019-01-22 
3   L03     1       2019-01-22  2019-01-22 
4   L04     0       2019-01-22  2019-02-04 

我遇到了问题,因为我想删除帖子中的记录,是的,我成功了,但是我希望它也将keyno状态也更新为0,以便它作为此键处于活动状态。但是我不知道我错过了什么,因为我可以删除但我无法更新Keyno状态。没有显示错误,但是我的状态没有更新。谁能帮助我或给我一些建议TT

下面是我的代码。

  

1 =正在使用键0 =未使用

1.Post控制器

 */
public function destroy($id)
{
    $post =  Post::find($id);
    $post->delete();
    if($post->delete()){
        $post = Post::find($id);
        $key = Keyno::all();

        $postroomkey = $post->roomkey;
        Keyno::where('roomkey','=',$postroomkey)
        ->update(['status' => 0]);
    }
}

1 个答案:

答案 0 :(得分:1)

您两次运行$post->delete();

第一个将删除帖子,但是第二个实际上不执行任何操作,这意味着它返回false,因为找不到帖子。

这意味着您在if语句中的代码实际上并未运行。更改为此:

public function destroy($id)
{
    $post =  Post::find($id);
    $postroomkey = $post->roomkey;
    if($post->delete()){
        $key = Keyno::all();

        Keyno::where('roomkey','=',$postroomkey)
        ->update(['status' => 0]);
    }
}

  

“试图获取非对象的属性'roomkey'”

这可能是由于$post不再是对象,因此在删除之前先获取roomkey。更新的答案。