【问题标题】:Updating has many relationship in Laravel更新在 Laravel 中有很多关系
【发布时间】:2018-07-03 21:35:51
【问题描述】:

我正在Laravel 5.5 中构建一个小型应用程序,其中有两个模型:InteractionInteraction Summary 在我的Interaction 模型中我有以下关系:

public function meetingSummaries()
{
    return $this->hasMany('App\InteractionSummary');
}

现在创建我在控制器中使用的交互:

$data = $request->only('user_id', 'event_type', 'schedule', 'summaries', 'type', 'venue', 'with_client');
$data['schedule'] = Carbon::parse($request->schedule)->addHours(5)->addMinutes(30)->toDateTimeString();
$meeting = [];
$meeting['user_id']= $data['user_id'];
$meeting['schedule'] = $data['schedule'];
$meeting['type'] = $data['type'];
$meeting['with_client'] = $data['with_client'];
$meeting['venue'] = $data['venue'];
$meeting['event_type'] = $data['event_type'];
$interaction = Interaction::create($meeting);
if($data['summaries'])
{
    $container = [];
    foreach($data['summaries'] as $summary)
    {
        $summary = (Object)$summary;
        if($summary->client['label'])
        {
            $container[] = new InteractionSummary([
                'company_id' => $summary->client['label'],
                'nature' => $summary->type,
                'user_id' => $summary->mention['label'],
                'action' => $summary->action,
                'feedback' => $summary->comment
            ]);
            }
        }
    }
    $interaction->meetingSummaries()->saveMany($container);
}

但在更新时我不知道如何克服这个问题,因为在我的领域中可能存在新的或旧的关系数据。我正在尝试这样的事情:

if($data['summaries'])
{
    $container = [];
    foreach($data['summaries'] as $summary)
    {
        $summary = (Object)$summary;
        if($summary->id)
        {
            $container[] = new InteractionSummary([
                'id' => $summary->id,
                'company_id' => $summary->client['value'],
                'nature' => $summary->type,
                'user_id' => $summary->mention['value'],
                'action' => $summary->action,
                'feedback' => $summary->comment
            ]);
        }
        else {
            $container[] = new InteractionSummary([
                'company_id' => $summary->client['value'],
                'nature' => $summary->type,
                'user_id' => $summary->mention['value'],
                'action' => $summary->action,
                'feedback' => $summary->comment
            ]);
        }
    }
    $interaction->meetingSummaries()->save($container);
}

这是向我发送错误:

类型错误:传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 的参数 1 必须是 Illuminate\Database\Eloquent\Model 的实例,给定数组,在 ~\app\Http\Controllers\ 中调用第 449 行的 InteractionsController.php

如果我这样做:

$interaction->meetingSummaries()->saveMany($container);

我得到重复的新字段。

指导我如何克服这个问题。谢谢。

【问题讨论】:

    标签: php laravel laravel-5.5 laravel-eloquent


    【解决方案1】:

    使用findOrNew() 方法:

    $summaryItem = InteractionSummary::findOrNew($summary->id);
    $summaryItem->fill([
        'company_id' => $summary->client['value'],
        'nature' => $summary->type,
        'user_id' => $summary->mention['value'],
        'action' => $summary->action,
        'feedback' => $summary->comment
    ]);
    

    【讨论】:

    • 如果没有summary->id的新字段呢?会报错吗?
    • @NitishKumar 如果带有id = $summary->id 的行不存在,则会创建一个新对象。
    • 我收到一个错误Column not found: 1054 Unknown column '106' in 'field list' (SQL: select 106, Ideasharing, ``, ``, Documents to be present`,来自interaction_summaries,其中interaction_summaries.id = 247 和interaction_summariesdeleted_at 为空限制 1)`
    • 我正在使用$summary = (Object)$summary; 将数据更改为对象,同时添加一个新的摘要我收到Undefined property: stdClass::$id 错误。你能帮我吗?
    • @NitishKumar 看起来您根本不需要将其转换为对象。只需使用$summary['id'] 符号即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2014-07-10
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多