| Summary: | Use search()->next instead of find() when using other than primary key | ||
|---|---|---|---|
| Product: | Koha | Reporter: | Johanna Räisä <johanna.raisa> |
| Component: | Architecture, internals, and plumbing | Assignee: | Bugs List <koha-bugs> |
| Status: | NEW --- | QA Contact: | Testopia <testopia> |
| Severity: | enhancement | ||
| Priority: | P5 - low | CC: | tomascohen |
| Version: | Main | ||
| Hardware: | All | ||
| OS: | All | ||
| GIT URL: | Initiative type: | --- | |
| Sponsorship status: | --- | Comma delimited list of Sponsors: | |
| Crowdfunding goal: | 0 | Patch complexity: | --- |
| Documentation contact: | Documentation submission: | ||
| Text to go in the release notes: | Version(s) released in: | ||
| Circulation function: | |||
(In reply to Johanna Räisä from comment #0) > The current code uses find() to look up records with a field other than the > primary key. However, find() is intended only for primary key lookups and > may not work as expected with other fields. > To ensure correct and future-proof behavior, replace find() with > search()->next when searching by non-primary key fields. > > For example, use: > Koha::Checkouts->search({ itemnumber => $item->itemnumber })->next; > instead of: > Koha::Checkouts->find({ itemnumber => $item->itemnumber }); > This change improves code reliability and compatibility with possible future > schema changes. You are right. I made the SIP code report more reliably about empty keys, but only dealt with patron searching: ``` ILS/Patron.pm: $patron = Koha::Patrons->find_by_identifier($patron_id); ``` I believe we should implement such methods for items/checkouts to complete the work i.e. Koha::Patrons->find_by_identifier does exactly what you are suggesting. |
The current code uses find() to look up records with a field other than the primary key. However, find() is intended only for primary key lookups and may not work as expected with other fields. To ensure correct and future-proof behavior, replace find() with search()->next when searching by non-primary key fields. For example, use: Koha::Checkouts->search({ itemnumber => $item->itemnumber })->next; instead of: Koha::Checkouts->find({ itemnumber => $item->itemnumber }); This change improves code reliability and compatibility with possible future schema changes.