如何使用Laravel模型访问现有数据库表?

时间:2014-07-03 18:30:26

标签: laravel eloquent

我有一个使用本机PHP编写的旧应用程序。现在我正在尝试使用Laravel 4实现新功能......我迷失了...... 我首先要做的是将这个select语句的结果放到页面上:

$sql = "SELECT item.item_id, reg_number, serial_1, serial_2, serial_3, item_type, item_material, item_loc, addit_info.* 
                FROM items
                JOIN addit_info on items.item_id = addit_info.item_id
                WHERE items.status = 's'
                ORDER BY status_changed DESC LIMIT 0 , 100;";

表的架构是:

CREATE TABLE IF NOT EXISTS( ITEM_ID int(10) unsigned NOT NULL AUTO_INCREMENT, reg_number char(9) COLLATE utf8_unicode_ci NOT NULL, reg_type char(1) COLLATE utf8_unicode_ci NOT NULL, make_id tinyint(3) unsigned NOT NULL, 模型varchar(20) COLLATE utf8_unicode_ci NOT NULL, main_color varchar(20) COLLATE utf8_unicode_ci NOT NULL, other_color varchar(20) COLLATE utf8_unicode_ci NOT NULL, serial_1 varchar(25) COLLATE utf8_unicode_ci NOT NULL, serial_2 varchar(25) COLLATE utf8_unicode_ci NOT NULL, serial_3 varchar(25) COLLATE utf8_unicode_ci NOT NULL, ITEM_TYPE char(1) COLLATE utf8_unicode_ci NOT NULL, item_material char(1) COLLATE utf8_unicode_ci NOT NULL, 状态char(1) COLLATE utf8_unicode_ci NOT NULL, status_changed timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, 价格{ {1}}说明float(6,2) unsigned NOT NULL, item_loc varchar(255) COLLATE utf8_unicode_ci NOT NULL, item_id varchar(15) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY ( reg_number ), UNIQUE KEY reg_number (;

CREATE TABLE IF NOT NOT EXISTS ) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=476(   addit_info int(10)unsigned NOT NULL,   item_id日期非空,   event_date1 varchar(250)COLLATE utf8_unicode_ci NOT NULL,   event_from varchar(255)COLLATE utf8_unicode_ci NOT NULL,   more_info日期非空,   PRIMARY KEY(event_date2item_id) )ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

我不知道我的模型应该是什么样的。我想我将无法使用Eloquent功能,而是必须使用查询构建器编写查询。但是,我仍然不知道在哪里提出我的疑问。它应该在一个处理我想要使用的所有查询的模型中吗?

1 个答案:

答案 0 :(得分:4)

你好像在同时问两件事,但我会专注于标题“如何使用Laravel模型访问现有数据库表?”中的问题。

我很确定你可以在你的旧数据库结构中使用Eloquent。在这种情况下,有关Eloquent的三个重要事项:

  1. Eloquent会将您的模型名称复数化,并将其用于获取表名称(您的模型名称应该适用于此名称)。
  2. Eloquent默认为id列作为主键。需要更改为item_id
  3. $timestamps默认启用,这意味着它会尝试查找created_atupdated_at列。我们需要禁用它。
  4. 所以你需要覆盖上面的#2和#3以使你的Eloquent模型有效,试试这个:

    <强>模型/ Item.php:

    class Item extends Eloquent
    {
        protected $table = 'items';
        protected $primaryKey = 'item_id';
        public $timestamps = false;
    
        // ...
    }
    

    关于您的第二个(隐藏的问题),您应该能够查找Laravel文档,以便轻松了解如何joinsrelationship