【问题标题】:Laravel's 5.2.33 Analogue (Data Mapper) orm Query ExceptionLaravel 的 5.2.33 Analogue (Data Mapper) orm 查询异常
【发布时间】:2016-09-24 17:32:36
【问题描述】:

我明白了

未定义的列:7 错误:不存在 la columna «users_id_seq» LINE 1: ...ated_at", "updated_at") 值 ($1, $2) 返回 "users_id_... ^ (SQL: 插入 "users" ("created_at", "updated_at") 值 (2016-05-26 15:19:02, 2016-05-26 15:19:02) 返回 "users_id_seq")

从控制器运行插入时

这是我的实体类

namespace App\Entities\Users;
use Analogue\ORM\Entity;

class BaseEntity extends Entity
{
    private $remember_token;
    private $created_at;
    private $updated_at;
    private $deleted_at;
    private $id;
    private $name;
    private $email;
    private $password;
    private $identification;
    private $cellphone;

    Here are getter/setter pairs for each property

}

这是我的地图类

namespace App\Entities\Users;

use App\Entities\BaseEntityMap;

class UserMap extends BaseEntityMap
{
    protected $primaryKey = 'id';
    public $softDeletes = true;
    public $timestamps = true;
}

这是控制器类

namespace App\Http\Controllers\Users;

use App\Http\Controllers\Controller;
use App\Http\ServiceResponse;
use App\Entities\Users\User;
use Faker\Factory as Faker;
use Carbon\Carbon;
use Monolog\Logger as Log;

class UserController extends Controller
{
    public function createRandom()
    {
        $logger = new Log("error");
        $randomUsers = array();
        for($i=0; $i<1000; $i++)
        {
            $userMapper = $this->mapper->mapper(User::class);
            $faker = Faker::create();
            $user = new User();
            $user->setName($faker->name);
            $user->setEmail($faker->email);
            $user->setPassword(bcrypt(rand(1000, 9999)));
            $user->setIdentification(bcrypt(rand(1000000, 100000000)));
            $user->setCellphone($faker->phoneNumber);
            //$user->setCreatedAt(Carbon::now());
            //$user->setUpdatedAt(Carbon::now());
            //$user->setDeletedAt(null);
            $logger->error("user --> " . print_r($user, true));
            $userMapper->store($user);
            $randomUsers[] = $user->convertToStdClass();
        }
        $response = new ServiceResponse(0, "createRandom", $randomUsers, "success");
        return response()->json($response->toJson());
    }
}

这就是 postgres 日志文件中查询的样子

2016-05-26 10:22:17 COT [4777-1] postgres@ewbackend ERROR:  no existe     la columna «users_id_seq» en carácter 76
2016-05-26 10:22:17 COT [4777-2] postgres@ewbackend SENTENCIA:  insert    into "users" ("created_at", "updated_at") values ($1, $2) returning   "users_id_seq"

用英文说“users_id_seq”列不存在,但我已经检查了数据库,并且该序列存在。

这是用户表的sql

-- Table: public.users

-- DROP TABLE public.users;

CREATE TABLE public.users
(
    id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass),
    name character varying(255) NOT NULL,
    email character varying(255) NOT NULL,
    password character varying(255) NOT NULL,
    identification character varying(255) NOT NULL,
    cellphone character varying(255) NOT NULL,
    remember_token character varying(100),
    created_at timestamp(0) without time zone,
    updated_at timestamp(0) without time zone,
    deleted_at timestamp(0) without time zone,
    CONSTRAINT users_pkey PRIMARY KEY (id),
    CONSTRAINT users_email_unique UNIQUE (email),
    CONSTRAINT users_identification_unique UNIQUE (identification) 
 )
 WITH (
 OIDS=FALSE
);
 ALTER TABLE public.users
 OWNER TO postgres;

我还检查了表(我使用迁移创建,只需在 laravel 5.2.33 中包含的迁移用户示例中添加一些字段)并且所有列都在那里,并且类型正确

我尝试自己分配日期,但这没有任何区别。

我也尝试在我的地图类上退出 timestamps=true,但随后我看到另一个错误,其中查询在 postgres 日志文件中没有字段或值,我需要时间戳列。

显示用户实例的日志,显示所有数据均已正确设置。

我也尝试将实体属性公开而不是私有,但这不起作用。

所以我很欣赏关于这个问题的任何想法。另外,如果您能告诉我模拟是否支持 postgres 事务(如果其中一个查询失败或仅在所有查询都成功操作时提交,则一组查询作为一个查询运行以失败)

【问题讨论】:

  • 能否包含users 表的SQL 定义?
  • 我将编辑问题以包含该问题,请一分钟
  • 我把sql放到问题上,也谢谢

标签: php postgresql laravel laravel-5.2 datamapper


【解决方案1】:

Analogue Entities 使用神奇的 setter getter,因此您不必手动添加私有属性 + getter 和 setter。

你试过了吗:

类 BaseEntity 扩展实体 {

}

并像这样设置你的专栏:

$user->name($faker->name); $user->email($faker->email); etc..

是的,afaik,它确实支持 Postgres 上的事务。

【讨论】:

  • 嗨,我明白了,但是管理层告诉我,我在数据映射器上花费了太多时间,所以现在我们使用的是本地活动记录。不过谢谢你的回复,我会在家里试一试
猜你喜欢
  • 2018-04-07
  • 2011-01-31
  • 2015-04-18
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多