За последние 24 часа нас посетили 17887 программистов и 1569 роботов. Сейчас ищет 1271 программист ...

Не работает мутация

Тема в разделе "Laravel", создана пользователем Сереганек, 1 окт 2017.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Почему-то не работает мутация. like + 1 (если раскомментировать строку) работает, изменения заносятся в таблицу БД. А вот like + 5 не срабатывает. В чем может быть причина? Мутации использую впервые, может не правильно понял их принцип работы.
    PHP:
    1.     public function updateLike(Request $request){
    2.         $comment = Comment::find($request->id);
    3.         //$comment -> like = $comment-> like + 1;
    4.         $comment -> save();
    5.     }
    6.  
    7.     public function setLikeAttribute($value){
    8.         $this -> like = $value+5;
    9.     }
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А где это?
     
  3. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Это переменная $value. Или я ошибаюсь?
    Т.е. like + 5 это по идее должно быть то же самое, что и $value + 5
     
    #3 Сереганек, 1 окт 2017
    Последнее редактирование: 1 окт 2017
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    ошибка видимо в "по идее". откуда берётся $value нам не видно.
     
  5. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А что там должно быть? Разве не значение редактируемого параметра туда должно попадать (автоматичекси)? Я пересмотрел кучу примеров, и везде одно и то же. Везде $value на входе при том, что сам метод мы явно нигде не вызываем, а значит и не можем ему ничего передать в эту переменную. Но в примерах она есть. Чего-то я недопонимаю, но не могу понять чего я не понимаю. Подскажите как должно быть правильно.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Правильно это когда понимаешь что делаешь. Неправильно, когда надеешся, что скопированное из разных мест чудесным образом заработает.
     
  7. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Написали много текста, а толку как-то мало. Вот чтобы понять как это должно работать, я и спрашиваю.
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    PHP:
    1.   public function setLikeAttribute($value){
    2.         $this -> like = $this -> like+$value;
    3.     }
    или

    PHP:
    1.   public function setLikeAttribute($value){
    2.         $this -> like = $this -> like+5;
    3.     }
    смотря что нужно вам...
    а еще - что за "мутации" ??? чет не понимаю
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    PHP:
    1. public function setFirstNameAttribute($value)
    2. {
    3.         $this->attributes['first_name'] = strtolower($value);
    4. }
    Обратите внимание на синтаксис мутации.
     
    Сереганек нравится это.
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Это означает всего лишь x = x + 5.
    А это означает x = y + 5. Вот и вся разгадка разной работы.
     
  11. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Разобрался, синтаксически у меня было все верно. artoodetoo, я правильно "скопировал из разных мест". И наличие переменной $value - это тоже норм. Но все же две ошибки я допустил.
    Во-первых, не мутация, а мутатор. Сори.
    Во-вторых (и по этой причине у меня ниче не работало), я должен был написать метод setLikeAttribute() в модели, а не в контроллере. Вот оно че, Михалыч. Всем спасибо.
     
    artoodetoo нравится это.
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Молодец.