Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4多态关系不起作用_Php_Mysql_Laravel_Polymorphism - Fatal编程技术网

Php Laravel 5.4多态关系不起作用

Php Laravel 5.4多态关系不起作用,php,mysql,laravel,polymorphism,Php,Mysql,Laravel,Polymorphism,目前正在尝试在Laravel 5.4中使用多态关系 我正试图用以下几行代码将所有“父对象”(映射)的json转储到一个表中: $mappings = Mapping::all(); return $mappings->toJson(); 但是,对$this->mappingable的调用只返回NULL。即使使用此选项访问单个模型: $mapping = Mapping::find(1); $title_mapping = $mapping->mappingable; //Still

目前正在尝试在Laravel 5.4中使用多态关系

我正试图用以下几行代码将所有“父对象”(映射)的json转储到一个表中:

$mappings = Mapping::all();
return $mappings->toJson();
但是,对
$this->mappingable
的调用只返回
NULL
。即使使用此选项访问单个模型:

$mapping = Mapping::find(1);
$title_mapping = $mapping->mappingable; //Still NULL
查看使用Debugbar进行的查询时,我只看到以下查询:
select*from mappings where mappings.id='1'limit 1
。这似乎是错误的,因为查询还应该从其他表中获取信息,不是吗

我尝试使用的模型的源代码如下:

Relation::morphMap([
    'title' => 'App\TitleMapping',
    'year' => 'App\YearMapping',
]);

class Mapping extends Model
{
    protected $connection = 'mappings_mysql';
    //

    public function mappingable()
    {
        return $this->morphTo();
    }

    public function jsonSerialize()
    {
        $arr = $this->toArray();
        return array_merge($arr, $this->mappingable->toArray());
    }

}

class TitleMapping extends Model {
    protected $table = "title_mappings";

    protected $connection = 'mappings_mysql';

    public function mapping()
    {
        return $this->morphOne('App\Mapping', 'mappingable', "mapping_type", "mapping_id"); //No difference between App\Mapping and App/Mapping
    }
}

class YearMapping extends Model {
    protected $table = "year_mappings";

    protected $connection = 'mappings_mysql';

    public function mapping()
    {
        return $this->morphOne('App\Mapping', 'mappingable', "mapping_type", "mapping_id");
    }
}
为表创建语法如下所示:

-- Create syntax for TABLE 'mappings'
CREATE TABLE `mappings` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `tmdbid` int(11) NOT NULL,
  `imdbid` varchar(9) NOT NULL DEFAULT '',
  `report_count` int(11) NOT NULL,
  `locked` tinyint(11) NOT NULL DEFAULT '0',
  `total_reports` int(11) NOT NULL,
  `mapping_type` varchar(20) NOT NULL DEFAULT '',
  `mapping_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

-- Create syntax for TABLE 'title_mappings'
CREATE TABLE `title_mappings` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `aka_title` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

-- Create syntax for TABLE 'year_mappings'
CREATE TABLE `year_mappings` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `aka_year` smallint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

可能是空的,您是如何插入id one的映射的?@AmeerSalahAldeen我手动插入了一些测试数据,但是在手动验证后id匹配。(一个简单的SQL连接查询也可以很好地工作,但我更愿意使用eloquent)请检查数据库中的映射类型是“title”还是“App\TitleMapping”,然后尝试这两种情况,可能问题是class@AmeerSalahAldeen这是“标题”。即使是这样,它也不能解释为什么Laravel甚至不查询另一个表。从我所读到的内容来看,select语句之后应该有一些join语句。