Php Laravel 5.4多态关系不起作用
目前正在尝试在Laravel 5.4中使用多态关系 我正试图用以下几行代码将所有“父对象”(映射)的json转储到一个表中: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
$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语句。