如果新的很多关系Laravel Eloquent,请保存

时间:2017-02-26 18:18:12

标签: laravel eloquent many-to-many

我有两个模型:Event和Soundcloud。

两者都被定义为Laravel中的多对多关系,并且工作正常。

我正在保存soundcloud并通过执行此操作来填充数据透视表event_soundcloud

foreach ($data as $artist => $url) {
     $soundcloud = Soundcloud::firstOrNew(['artist_name' => $artist, 'link' => $url]);
    $event->soundclouds()->save($soundcloud);
}

每10分钟调用一次该函数,每次将相同的记录添加到数据透视表中。

有没有办法做同样的事情,但只有在已经不存在的情况下才在数据透视表中添加记录? 谢谢

1 个答案:

答案 0 :(得分:0)

这是我做的工作。我猜你不能一步到位

        using (SqlConnection conn = new SqlConnection(cs))
        {

            SqlCommand cmd = new SqlCommand("spInsOrg", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            var outParam = cmd.Parameters.Add("@orgID", SqlDbType.Int);
            outParam.Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@orgName", SqlDbType.NVarChar).Value = txtOrgName.Text;
            cmd.Parameters.Add("@orgCity", SqlDbType.NVarChar).Value = txtCity.Text;
            cmd.Parameters.Add("@orgArea", SqlDbType.NVarChar).Value = txtArea.Text;
            cmd.Parameters.Add("@orgTel", SqlDbType.NVarChar).Value = txtTele.Text;
            cmd.Parameters.Add("@orgEmail", SqlDbType.NVarChar).Value = txtEmail.Text;
            cmd.Parameters.Add("@orgType", SqlDbType.NVarChar).Value = txtOrgType.Text;
            cmd.Parameters.Add("@orgStatus", SqlDbType.NVarChar).Value = txtStatus.Text;
            cmd.Parameters.Add("@strOwner", SqlDbType.VarChar).Value = User.Identity.Name;
            cmd.Parameters.Add("@db_tstamp", SqlDbType.DateTime2).Value = DateTime.Now;
            conn.Open();
            cmd.ExecuteNonQuery();
            var orgId = (int)outParam.Value;
            SqlCommand cmdloc = new SqlCommand("spInsLoc", conn);
            cmdloc.CommandType = CommandType.StoredProcedure;

        }