What is the method to submit a current timestamp directly on an INSERT or an UPDATE? If I were running regular SQL, I would use the function NOW() for the specific SQL field on submission. How would I do that with CakePHP?
$this->Model->save($this->data)
In CakePHP, you can include the NOW() function unescaped by using DboSource::expression
$this->data['SomeModel']['your_datetime_field'] = DboSource::expression('NOW()');
$this->Model->save($this->data);
This is the preferred way of including MySQL functions in your saves.
http://api.cakephp.org/2.3/class-DboSource.html#_expression
if you add the created and modified columns in you table they will be automatically populated with current time stamp. If the case is different - i.e. you want to populate a field which later on you want to modify, probably using the edorian's solution is best.
You can set timestamp field to auto initialize and auto update
timestampfield TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
http://dev.mysql.com/doc/refman/5.0/en/timestamp.html
Related
I need mysql to automatically update a field on every update. I created the field as:
`lastModified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
But the problem is as I update a record using R::store, the lastModified does not get updated automatically but is set to the last set value. Note that my code is not setting the field. Basically doing a findOne and store to set any other field should update the timestamp but looks like redbeans is reading the whole row (so lastUpdated is filled in as old time) and assuming when I store, it thinks I am setting it to old time value.
lastModified property is pure MYSQL. It does not depend on the implementation.
RedbeanPHP also updates mysql database, have you disabled this?
R::freeze( TRUE );
Once you put it on freeze, you can modify the database and tables yourself, and redbean will not update it. This should also take care of the lastModified property.
try this
$bean->lastModified = date('Y-m-d G:i:s');
R::store($bean);
Is there a way in MySQL to get insert date/time for rows if there was no insert_date field. I have a database which I configured to store insert_date but can I populate the field before that change ( month ago ). Is that even possible?
Pull that insert date/time from log or something else?
Nope. If that date wasn't stored before, it's impossible to find out when a row was inserted. The best you can do is just pick a date, or maybe make a rough estimate if you have information to base that on (for instance, the create date of a customer might be related to the date of their first invoice)..
By the way, you can add timestamp columns and specify the clause DEFAULT CURRENT_TIMESTAMP to set a timestamp as soon as you insert the row. That way, you don't need a trigger to update the row.
You can even add a clause ON UPDATE CURRENT_TIMESTAMP so the column (or a different column) is updated automatically too.
See Timestamp initialization for more information about this subject.
This doesn't change the fact, though, that you cannot get those values for rows that already exist.
Faced the problem: when i am trying to update field via active record in CodeIgniter there also updates timestamp field. For example my code:
$this->db->where('user_i', 1);
$this->db->update('ci_users', $user_info);
Creates this sql:
UPDATE `ci_users` SET `user_fullname` = 'asdasdfsafd' WHERE `user_iD` = 1
But after execution there also changes ci_users.user_creation_date field. Where there may be a problem?
That's what timestamp fields are for.
If you don't want them to be altered on update - use DATETIME instead
Mysql will automatically update the timestamp to current-timestamp if you have give default value CURRENT_TIMESTAMP or NULL to the column, so the solution is that you should not give the default value to that column...
I have a database where people register on a website and their form data then gets inserted into their database. Along with all that information, I want to insert the time of their registration. For example I have an auto-incrementing ID column which I do nothing in my php script for, the sql database automatically increments that with every new entry. In the same way, can I have a time column that I don't have to do anything in the script for, rather the database will just get the current time and put that along with the other inserted information? I'm using phpMyAdmin and I tried adding a column named Time with the type as DATETIME and the default value as the CURRENT_TIMESTAMP but it woulnd't let me add that and said invalid default value for Time.
Change the column type to TIMESTAMP.
Use a timestamp field, which does exactly what you want.
use timestamp column type e.g.
`inserted` timestamp NOT NULL default CURRENT_TIMESTAMP
I want to automatically add date in order_date field when a customer checkouts my online shop.
What is the best way to do it?
There are other fields like, delivery data and payment date in the same table.
Is it good idea to add a hidden field so that when a cutomer submit, the date will be added?
But I am not sure how to do it.
Can anyone suggests me the better way to do it please?
No, you don't need a hidden form field. You can do this directly in MySQL.
Assuming that your order_date field is a DATE. DATETIME or TIMESTAMP, then in your SQL that inserts the order record, simply put NOW() as the value for order_date:
INSERT INTO orders (x,y,z,order_date) VALUES ('x','y','z',NOW());
In the update statement that finalizes your order record, do something like this:
update order set ....., order_date = now() where ...
You don't want to rely on client-side date anyway. It could be off, and think of the timezones. You want a single source of dates in your system, and that should be either the database or the server-side code layer (PHP or what have you).
When a customer places an order you can use a TIMESTAMP column to track when the order was placed / the order was saved the database. Something like:
ALTER TABLE sales_order ADD COLUMN date_placed TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
The DEFAULT CURRENT_TIMESTAMP will be filled with the current time when the row is created, but not on subsequent updates. See the docs for more:
http://dev.mysql.com/doc/refman/5.0/en/timestamp.html
With a DEFAULT CURRENT_TIMESTAMP
clause and no ON UPDATE clause, the
column has the current timestamp for
its default value but is not
automatically updated.