Как иметь отношение в Laravel 5.7 на основе ключа данных json, сохраненного в столбце таблицы? - PullRequest
1 голос
/ 20 марта 2020

Я использую пакет 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, уже. Так что отношения не должны быть пустыми.

Что я делаю не так?

1 Ответ

0 голосов
/ 20 марта 2020

Изменение:

 protected $casts = [
           'data' => 'json'
        ];

К:

 protected $casts = [
           'data' => 'array'
        ];
...