【问题标题】:Call to a member function replicate() on null / Clone an Product from DB在 null 上调用成员函数 replicate() / 从 DB 克隆产品
【发布时间】:2018-01-12 16:57:31
【问题描述】:

我想在我的数据库中使用新的产品 ID 复制产品。

我的 index.blade:

<form action="{{ route('cloneproduct',['uid'=>$product->uniqueid]) }}" method="post" enctype="multipart/form-data">

{{csrf_field()}}

<button type="submit" name="button" class="cloneproduct">Clone</button>

</form>

路线:

Route::post('cloneproduct/{uniqueid}','ProfileController@CloneItem')->name('cloneproduct');

控制器:

public function CloneItem($uniqueid)
    {
        $product = Product::find($uniqueid);
        $new_product = $product->replicate();
        $new_product->push(); 
       return redirect()->back();

    }

错误:

在 null 上调用成员函数 replicate()

有什么问题?它在我的数据库中不为空..

谢谢

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您收到错误是因为表中没有带有id = $uniqueId 的行:

    Product::find($uniqueid);
    

    find() 方法使用主键查找行。因此,如果您已将 id 更改为其他内容,则需要在 Product 模型中定义 $primaryKey 属性:

    protected $primaryKey = 'uid';
    

    您还可以检查find() 是否没有返回对象:

    if (is_null($product))
    

    【讨论】:

    • 还有 0 个结果.. ID 存在 100%
    • @markussibert 正如我在回答中所说,如果不是id,则需要定义一个主键。或者这样做Product::where('uid', $uniqueId)-&gt;first() 而不是find()
    • 现在我得到这个错误:“解析错误:语法错误,意外的'$newproduct'(T_VARIABLE)”:(
    • 在行尾添加;
    • 谢谢你!效果很好! :) 我还必须将“uid”更改为“uniqueId”。我还可以生成一个新的 uniqueId 吗?因为如果产品具有相同的 uniqueId(那是我的产品 URL),则所有项目都具有相同的链接。
    【解决方案2】:

    在这种情况下尝试使用findOrFail()

    public function CloneItem($uniqueid)
        {
            $product = Product::findOrFail($uniqueid);
            $new_product = $product->replicate();
            $new_product->push(); 
           return redirect()->back();
    
        }
    

    【讨论】:

    • 没有具有该 ID 的产品。确保您有一个具有该 ID 的产品并且该主键未更改。如果它发生了变化,那么您必须在产品型号protected $primaryKey = 'yourKey'; 中指定
    • 我不明白这个..我没有更改ID并且具有ID的产品存在。
    • 好的,那么您在数据库中没有具有该 ID 的产品。如果您有具有该 ID 的产品,请手动检查数据库。并告诉我们您的产品主键是什么。
    • 是的,我当然有 id,而且我也在我的索引页面上看到它。我现在想在产品后面添加一个克隆按钮。主键是什么意思?
    • @markussibert 只需转到表 Product 并向我显示列名。如果您的 $uniqueId 可以说它的 2,那么在数据库中您必须有一个 id(主键)2 的产品,否则您将获得 No query results 这意味着您在数据库中没有该产品。
    猜你喜欢
    • 2017-03-10
    • 2017-08-09
    • 1970-01-01
    • 2020-03-10
    • 2017-09-24
    • 2018-02-06
    • 2018-09-29
    • 2018-08-04
    • 2020-03-28
    相关资源
    最近更新 更多