Я использую пакет Staudenmein в Laravel и ссылаюсь на этот ответ, данный самим владельцем пакета.
У меня есть две таблицы, pets
и notifications
с модели Pet
и Notification
. Таблица notifications
имеет столбец с именем data
, который имеет JSON dataType и хранит JSON data
{"pet_id":"4","pet_type_id":1,"lost_report_id":3,"pet_sighting_id":21,"latitude":"22.676846","longitude":"88.338509"}
Ключ pet_id
обозначает столбец id
pets
Таблица. Мне нужны отношения, чтобы я мог получить имя питомца из таблицы pets
.
Обратившись к ссылке на ответ, приведенной выше, я написал свою модель Notification
следующим образом: -
namespace App\Models;
use DB, App, Auth, Hash, Lang, Mail, Config, Exception, Validator, Globals;
use Illuminate\Database\Eloquent\Model;
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
use App\User;
use App\Models\AdminConfig;
use App\Models\ReceivedAppNotification;
class Notification extends Model
{
protected $casts = [
'data' => 'json'
];
public function notificationPet()
{
return $this->belongsTo('App\Models\Pet', 'data->pet_id');
}
}
Когда я выполняю запрос, подобный следующему: -
$notificationQuery = Notification::with('notificationPet')
->whereRaw("FIND_IN_SET('$userId', in_app_notification_receiver)")
->where(array(
'status' => Globals::SMALL_CHAR_ACTIVE,
'is_delete' => Globals::SMALL_CHAR_NO,
))->get()->toArray();
Я получаю отношение NotificationPet как пустое, ie. набор данных выглядит так: -
Array
(
[id] => 10
[title] =>
[message] =>
[data] => Array
(
[pet_id] => 4
[latitude] => 22.676846
[longitude] => 88.338509
[pet_type_id] => 1
[lost_report_id] => 3
[pet_sighting_id] => 34
)
[no_of_in_app_notification_receiver] => 2
[no_of_push_notification_receiver] => 1
[from_user] => 22
[in_app_notification_receiver] => 2,23
[push_notification_receiver] => 2
[status] => a
[is_delete] => n
[push_notification_sent] => n
[created_date] => 2020-03-19 13:23:17
[modified_date] => 2020-03-19 13:23:17
[created_at] => 2020-03-19 13:23:17
[updated_at] => 2020-03-19 13:23:17
[notification_pet] =>
)
Однако у меня уже есть запись в таблице домашних животных с id = 4, уже. Так что отношения не должны быть пустыми.
Что я делаю не так?