phalcon / cphalcon

High performance, full-stack PHP framework delivered as a C extension.
https://phalcon.io
BSD 3-Clause "New" or "Revised" License
10.79k stars 1.96k forks source link

[BUG]: if model has field `source` ,it cannot be assigned by `assign` #16617

Open itknight opened 4 months ago

itknight commented 4 months ago

Questions? Forum: https://phalcon.io/forum or Discord: https://phalcon.io/discord

Describe the bug A clear and concise description of what the bug is.

I have a model CharmingU and it has a field source, when i update charming_u record by assgin ,it cannot be updated, just like below: image

i've printed the value with line numbers, and its query result ,just like belows:

image

so , i tried update it manually ,it works.,just like below:

image

i don't if it is a bug or my mistake, if you wanna reproduce it ,just like below:

To Reproduce

Provide output if related. Provide coredump if any. Use https://docs.phalcon.io/latest/generating-backtrace as reference.

1.make a model any name ,

  1. make sure it has a field called source.
  2. update it by using assign
  3. check it out.

PHP version : image

Phalcon Version: image

noone-silent commented 4 months ago

I think this is happening, because of the setSource() method. The assign() method is calling setters if the exist, but setSource() has a special meaning.

A workaround of this problem is to use a MetaData Strategy (like Annotations) to rewrite the field source to something else without changing your database.

Also you could rename your database field.

yahveh commented 3 months ago

Is it possible to consider the internal properties of the Model, refer to cphalcon 3.x and add an underscore prefix, and some built-in methods also do some adjustment convention rules for easy identification