2016-08-15 2 views
0

я колонна называется жаркостью на сообщениях стола, и я пытаюсь обновить его с помощью elequent ОРМА сохранить() методLaravel 5,2 Elequent ORM сохранить() не работает

Это мой код:

$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(); 

После того как я запустил эту команду и проверил свою базу данных, пост-горячая позиция все еще находится на начальном значении. Оба эха распечатывают правильное значение, и ошибки не возникают. Любая идея, почему он не обновляется?

ответ

0

Я понял. Оказывается, вы не можете использовать «select» на модели, которую вы обновляете, поэтому я изменил свой код на это, и это сработало.

$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(); 

Если есть лучший способ сделать это, пожалуйста, дайте мне знать.

Смежные вопросы