dpz90118 2016-08-15 15:33
浏览 374
已采纳

Laravel 5.2 Eloquent ORM save()不起作用

I have a column called hotness on the posts table, and I am trying to update it using the elequent orm save() method

This is my code:

$rank = new Ranking;
$post = Post::where('id', $post_id)
    ->select(DB::raw("(select count(*) from votes where votes.vote = '1' and votes.post_id = posts.id) as upvotes, (select count(*) from votes where votes.vote = '0' and votes.post_id = posts.id) as downvotes, posts.created_at, posts.hotness"))
    ->first();

echo "Starting HOTNESS: " . $post->hotness; //CORRECT VALUE

$post->hotness = $rank->hotness($post->upvotes, $post->downvotes, strtotime($post->created_at));

echo "Updated HOTNESS: " . $post->hotness; //CORRECT VALUE

$post->save();

After I run this command and check my database, the post hotness is still at the starting value. Both of the echo's are printing out printing out the correct value, and no errors are being thrown. Any idea why it's not updating?

  • 写回答

1条回答 默认 最新

  • dongyisa6254 2016-08-15 16:15
    关注

    I figured it out. It turns out you cant use a 'select' on the the model you are updating so I changed my code to this and it worked.

    $rank = new Ranking;
    $postVotes = Post::where('id', $post_id)
        ->select(DB::raw("(select count(*) from votes where votes.vote = '1' and votes.post_id = posts.id) as upvotes, (select count(*) from votes where votes.vote = '0' and votes.post_id = posts.id) as downvotes"))
        ->first();
    
    $upvotes = $postVotes->upvotes;
    $downvotes = $postVotes->downvotes;
    
    $post = Post::where('id', $post_id)->first();
    $post->hotness = $rank->hotness($upvotes, $downvotes, strtotime($post->created_at));
    $post->save();
    

    If there is a better way to do this, please let me know.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?