在laravel中获取与创建模型输入相关的错误

时间:2017-03-21 23:22:35

标签: laravel

我是初学者在laravel和我试图弄清楚代码有什么不对,我试图将$ userr传递给整数,但发现了不同的困难。这是我得到的错误:

  

Connection.php第647行中的QueryException:   SQLSTATE [HY000]:常规错误:1366不正确的整数值:' [{" id":5}]'对于列' userid'在第1行(SQL:插入objectsaccessuseridupdated_atcreated_at)值([{" id":5}],2017 -03-21 23:11:12,2017-03-21 23:11:12))

型号代码:

   $userr = User::select('users.id')
        ->where(['remember_token' => $token])

        ->get();

    $objectt = Object::select('objects.id')
        ->where(['objects.name' => $passname])
        ->get();

    $inputs = [  'userid' => $userr,'objectid' => $objectt];

    ObjectAccess::create($inputs);

我想在objectsaccess中创建一个userid和object id的新行。但没有成功。

知道为什么会这样吗?

谢谢你!

编辑1:

解决了第一个问题,但我得到了错误:

  

Collection.php第1440行中的ErrorException:   未定义的偏移量:0   在Collection.php第1440行   at HandleExceptions-> handleError(8,' Undefined offset:0',' /var/www/html/rx1/vendor/laravel/framework/src/Illuminate/Support/Collection.php&# Collection.php第1440行中的39;,1440,数组('键' => 0))   at Collection-> Object.php第140行中的offsetGet(0)

    if($object)
    {


        $return['errors'] = 'Send Successful';

        $return['status'] = 200;
        $return['success'] = 1;
        $return['content'] = $object['0']->content; // this is line 140  of object.php
        $return['ylink'] = $object['0']->ylink;
        $return['slink'] = $object['0']->slink;
        return $return;
    }

编辑2($ object):

$object = Object::select('objects.*', 'users.LAST','users.remember_token')
        ->join('users', 'users.LAST', '=', 'objects.passvariable')
       ->where(['remember_token' => $token])
        //->where('objects.passvariable', 'users.passvariable')
        ->where(['objects.name' => $passname])
        ->get();

1 个答案:

答案 0 :(得分:0)

您需要先修改代码。也许使用评论中提到的关系。但首先要修复你的查询。

 $userr = User::select('id')
 ->where('remember_token', $token)
 ->first(); //<-- replace get()

因为get()返回一个集合并首先返回一个对象。同样适用于$objectt

然后,您的SQL仅考虑了userid并忽略了objectid。也许,您没有在objectid <{1}}

$fillable数组中添加ObjectAccess

最后你可以做到

ObjectAccess::create([
    'userid' => $userr->id,
    'objectid' => $objectt->id
]);

修改

由于您的$object变量实际上是一个集合,所以请执行此操作。

if ( $object ) {
    $return['errors'] = 'Send Successful';
    $return['status'] = 200;
    $return['success'] = 1;
    $first = $object->first();

    if ( $first ) {
        $return['content'] = $first->content;
        $return['ylink']   = $first->ylink;
        $return['slink']   = $first->slink;
    }

    return $return;
}

就像惯例一样,在最后用s命名你的集合/数组变量,这样你或任何其他开发人员都会知道它是复数,所以它是集合或数组。