Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет,
В laravel 5.5 приложения удаляю строку со связанными строками
public function destroy($id)
{
try {
DB::beginTransaction();
$userChat = UserChat::find($id);
if ($userChat == null) {
return response()->json(['error_code' => 11, 'message' => 'User chat # "' . $id . '" not found!', 'userChat' => null],
HTTP_RESPONSE_INTERNAL_SERVER_ERROR);
}
$userChat->delete();
DB::commit();
} catch (Exception $e) {
DB::rollBack();
return response()->json(['error_code' => 1, 'message' => $e->getMessage(), 'userChat' => null], HTTP_RESPONSE_INTERNAL_SERVER_ERROR);
}
return response()->json(['error_code' => 0, 'message' => ''], HTTP_RESPONSE_OK);
}
В app/UserChat.php описаны отношения со связанными таблицами:
<?php
namespace App;
use DB;
use App\MyAppModel;
use App\User;
use App\Task;
use App\UserChatMessage;
use App\UserChatParticipant;
use App\UserChatLastVisited;
use App\UserChatMessageDocument;
use App\UserChatNewMessage;
use App\library\ListingReturnData;
use App\Events\UserChatUpdatingEvent;
use App\Rules\CheckUserChatParticipantSelected;
class UserChat extends MyAppModel
{
protected $table = 'user_chats';
protected $primaryKey = 'id';
public $timestamps = false;
protected $dispatchesEvents = [
'updating' => UserChatUpdatingEvent::class,
];
public function userChatParticipants()
{
return $this->hasMany('App\UserChatParticipant');
}
public function userChatMessageDocuments()
{
return $this->hasMany('App\UserChatMessageDocument');
}
public function userChatLastVisited()
{
return $this->hasMany('App\UserChatLastVisited');
}
public function userChatMessages()
{
return $this->hasMany('App\UserChatMessage');
}
public function task()
{
return $this->hasOne('App\Task');
}
protected static function boot() {
parent::boot();
self::deleting(function($userChat) {
$userChat->userChatParticipants()->delete();
echo '<pre>BEFORE DELETE $userChat->userChatMessages()->delete()::'.print_r(-5,true).'</pre>'; // Эта строка отладки выводится
$userChat->userChatMessages()->delete();
$userChat->userChatMessageDocuments()->delete();
$userChat->userChatLastVisited()->delete();
});
}
Также существует класс UserChatNewMessage определенный в app/UserChatNewMessage.php:
<?php
namespace App;
use DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image as Image;
use App\MyAppModel;
use App\User;
use App\Config;
use App\UserChatMessage;
use App\library\ListingReturnData;
class UserChatNewMessage extends MyAppModel
{
protected $table = 'user_user_chat_new_messages';
protected $primaryKey = 'id';
public $timestamps = false;
protected $userChatNewMessageImagePropsArray = [];
protected $fillable = [ 'user_chat_message_id', 'user_id' ];
public function userChatMessage(){
return $this->belongsTo('App\UserChatMessage', 'user_chat_message_id','id');
}
Этот класс свзян с классом userChatMessage поэтому в определеннии этого класса я определяю метод для удаления связанных данных :
<?php
namespace App;
use DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use App\MyAppModel;
use App\User;
use App\Task;
use App\UserProfileDocument;
use App\DocumentCategory;
use App\UserChatNewMessage;
use App\library\ListingReturnData;
use App\Events\UserChatMessageUpdatingEvent;
class UserChatMessage extends MyAppModel
{
protected $fillable = [ 'user_id', 'user_chat_id', 'is_top', 'text'];
protected $table = 'user_chat_messages';
protected $primaryKey = 'id';
public $timestamps = false;
protected $dispatchesEvents = [
'updating' => UserChatMessageUpdatingEvent::class,
];
public function user(){
return $this->belongsTo('App\User', 'user_id','id');
}
public function userChat(){
return $this->belongsTo('App\UserChat', 'user_chat_id','id');
}
public function userChatNewMessages()
{
echo '<pre>userChatNewMessages -13::'.print_r(-13,true).'</pre>';
return $this->hasMany('App\UserChatNewMessage');
}
protected static function boot() {
parent::boot();
echo '<pre>boot -1::'.print_r(-1,true).'</pre>'; // Это сообщение выводится
self::deleting(function(UserChatMessage $userChatMessage) {
echo '<pre>boot $userChatMessage->id::'.print_r($userChatMessage->id,true).'</pre>'; // Это сообщение НЕ ВЫВОДИТСЯ
$userChatMessage->userChatNewMessages()->delete();
});
}
Я как раз не пойму почему НЕ вызывается цикл
self::deleting(function(UserChatMessage $userChatMessage) {
и соотвественно строки userChatNewMessages не удаляются ?
Что-то упустил в описании моделей?
Спасибо!
Не в сети
Страницы 1