Laravel 多态-创建插入记录并跟踪空白记录

Laravel 多态-创建插入记录并跟踪空白记录,laravel,eloquent,entity-relationship,Laravel,Eloquent,Entity Relationship,为此,我在我的模型上设置了一个多态关系,我必须为变形引用的表创建匹配字段 所以我创造了一个 翻译模式 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Translation extends Model { protected $table = 'translations'; pr

为此,我在我的模型上设置了一个多态关系,我必须为变形引用的表创建匹配字段

所以我创造了一个

翻译模式

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Translation extends Model
{
    protected $table = 'translations';
    protected $primaryKey = 'id';

    protected $fillable = ['title', 'text_line1', 'text_line2', 'quote', 'language', 'content', 'translationable_type','translationable_id', 'content'];

    use SoftDeletes;

    public function translationable()
    {
        return $this->morphTo();
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Slide extends Model
{
    /**
     * Slide table
     */
    protected $table = 'slides';
    protected $primaryKey = 'id';

    public function translations()
    {
        return $this->morphToMany('App\Models\Translation', 'translationable', 'translations', '', 'translationable_id');
    }

}
当我运行它时,它会创建一条记录,但也会创建另一条完全为空的记录,而不是引用translationable_id和translationable_类型

有人知道为什么会这样吗


干杯。

您能试着在
morptomy
声明中将空字符串更改为null吗:
“translations”,null
。或者用
$this->morphToMany('App\Models\Translation','translationable')试试因为您使用了laravel命名约定,所以laravel可以自己生成这些值。Hi@Remul不幸的是,仍然是一样的。。。返回$this->morphToMany('App\Models\Translation','translationable','translations',null',translationable_id');您好@Remul感谢您在这方面的帮助,找到了一个解决方案:return$this->morphMany(Translation::class,'translationable');好的,您使用的是一对多关系,而不是多对多关系,这样才有意义。作为旁注:创建翻译时,您可以从传递给
$slide->translations()->create()
的数组中删除
可翻译的\u id
可翻译的\u type
,laravel将自己填充这些值。
$slide = Slide::find(16);

        $translations = array(
            'text_line1'            => $slide->text_line1,
            'text_line2'            => $slide->text_line2,
            'language'              => 'fr',
            'translationable_id'    => $slide->id,
            'translationable_type'  => 'App\Slide'
        );

        $slide->translations()->create($translations);