在 laravel 5.2 中找不到 replicate() 方法

replicate() method not found in laravel 5.2

我正在尝试复制 table 行及其关系。

但我收到错误消息,指出 replicate() 不存在,

我在 Whosebug 上看到很多人都毫无问题地使用了 replicate(),但我收到了这个错误

我的控制器代码

 public function copyshowtime($cinema_id,$show_date)
{
    $date=new Carbon($show_date);
    $current_show_date=$date->format('Y-m-d');
    $next_show_date=$date->addDay()->format('Y-m-d'); 

    $movieshowtime=Movies_showtimes::with('showdata')->where([['cinema_id','=',$cinema_id],['show_date','=',$current_show_date]])->get();

    $newshowtime=$movieshowtime->replicate();
    return $newshowtime;


}

使用 replicate() 是否必须使用任何命名空间,我也无法从 laravel 网站获得解决方案。

感谢帮助。

您可以在模型上使用 replicate(),但不能在 collection 上使用。

通过使用 get() 获取记录,您将返回 collection。

如果您只希望返回一条记录,则将 get() 替换为 first() 然后 replicate() 应该存在,因为它将返回模型的实例而不是模型的实例collection:

public function copyshowtime($cinema_id,$show_date)
{
    $date=new Carbon($show_date);
    $current_show_date=$date->format('Y-m-d');
    $next_show_date=$date->addDay()->format('Y-m-d'); 

    $movieshowtime=Movies_showtimes::with('showdata')->where([['cinema_id','=',$cinema_id],['show_date','=',$current_show_date]])->first();

    $newshowtime=$movieshowtime->replicate();
    return $newshowtime;
}

您还需要 save() $newshowtime

这段代码非常适合我

 public function copyshowtime($cinema_id,$show_date)
{
    $date=new Carbon($show_date);
    $current_show_date=$date->format('Y-m-d');
    $next_show_date=$date->addDay()->format('Y-m-d'); 

    $movieshowtime=Movies_showtimes::with('showdata')->where([['cinema_id','=',$cinema_id],['show_date','=',$current_show_date]])->get();

    foreach ($movieshowtime as $item) 
    {
        $item->show_date=$next_show_date;
        $item->show_id=NULL;
        $newshowtime=$item->replicate();
        $newshowtime->push();


        foreach ($item->showdata as $sd) 
        {


            $newshowdata = array(
                                    'showdata_id' => NULL,
                                    'show_id'=>$newshowtime->id,
                                    'category_id'=>$sd->category_id,
                                    'showdata_category'=>$sd->showdata_category,
                                    'showdata_rate'=>$sd->showdata_rate

                                );


           // print_r($newshowdata);
            Movies_showdata::create($newshowdata);



        }
    }

    return redirect()->back();


}

任何改进此代码的建议将不胜感激。

此类函数有助于克隆多个记录并将这些记录添加到同一个 table。我尝试了类似的代码流程并成功了。

/**
* Clone multiple records in same table
*
* @params int $cinemaId
* @params string $showDate
*
* @return bool $status
*
* @access public
*/
public function copyShowTime($cinemaId, $showDate)
{
    $date = new Carbon($showDate);
    $currentShowDate = $date->format('Y-m-d');

    // Cloned & Create new records
    $moviesShowTimeCollection = Movies_showtimes::with('showdata')->where([['cinema_id','=',$cinemaId],['show_date','=',$currentShowDate]])->get();
    // Please check that Model name should change according to camelCases - Movies_showtimes to MoviesShowtimes
    if(!$moviesShowTimeCollection->isEmpty()) {
        $moviesShowTimeData = $moviesShowTimeCollection->toArray();
        foreach ($moviesShowTimeData as $key => $value) {
            $primaryKey = 'show_id'; // Needs to check the table primary key name
            $primaryId = $value[$primaryKey];
            $moviesShowTimeObj = Movies_showtimes::find($primaryId);
            // below code can modify while cloaning 
            //$clonedMoviesShowTimeObj = $moviesShowTimeObj->replicate()->fill([
            //    'column_name' => $updatedValue
            //]);
            $clonedMoviesShowTimeObj = $moviesShowTimeObj->replicate(); // just to clone a single record
            $status = $clonedMoviesShowTimeObj->save();
        }
    }
}

干杯!

您可以轻松地复制那些行中有新更改的行

$apcntReplicate = TrademarkApplicantMap::where('trademark_id', $trdIdForPostAssesment)->get();

foreach($apcntReplicate as $oldapnctdata) 
{
   $apcntreplicated = $oldapnctdata->replicate() ;

   //update row data which will newly created by replicate 
   $apcntreplicated->row_name =  $newrowdata;

   //save new replicated row
   $apcntreplicated->save();
}

不要使用 toArray() 那么 foreach 循环中的每个元素都将是一个 Eloquent 对象。