У меня есть следующая схема:Обновление дополнительного столбца сводной таблицы в Laravel 4
public function up()
{
Schema::create('messages', function(Blueprint $table) {
$table->increments('id');
$table->mediumText('subject');
$table->text('message');
$table->boolean('draft');
$table->integer('sender_id')->unsigned();
$table->softDeletes();
$table->timestamps();
$table->foreign('sender_id')->references('id')->on('users')->onUpdate('cascade');
});
Schema::create('message_assets', function(Blueprint $table) {
$table->increments('id');
$table->integer('message_id')->unsigned();
$table->string('filename', 255);
$table->softDeletes();
$table->foreign('message_id')->references('id')->on('messages')->onUpdate('cascade');
});
Schema::create('message_users', function(Blueprint $table) {
$table->increments('id');
$table->integer('message_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->integer('read')->default(0);
$table->string('folder', 255)->nullable();
$table->softDeletes();
$table->foreign('message_id')->references('id')->on('messages')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade');
});
}
То, что я хотел бы сделать, это обновляет read
столбец в сводной таблице, чтобы верно, когда пользователь просмотра сообщения. У меня есть контроллер, прибитый его как раз как я могу получить соответствующую запись от стержня и обновить только поле read
.
Вот связь:
public function to()
{
return $this->belongsToMany('SeriousJelly\Modules\Users\Models\User', 'message_users', 'message_id', 'user_id');
}
Спасибо, я на самом деле пробовал это, но я, кажется, не получил никаких ошибок, и поле «читать», похоже, не обновляется. $ this-> model-> to() -> updateExistingPivot ($ userId, ['read' => 1]); – ChrisBratherton
@SeriousJelly Я обновил свой ответ на ваши комментарии, проверю его и дайте мне знать, если он сработает для вас. – whoacowboy
Извините, но это порождает следующую ошибку: Нарушение ограничения целостности: 1048 Столбец 'message_id' не может быть нулевым (SQL: insert в значения 'message_users' (' message_id', 'read',' user_id') (, 1, 1)) «* Я хочу обновить строку, а не вставить новую? – ChrisBratherton