Home > PHP Framework > Laravel > Detailed explanation of how to set up sub-tables for relationships between Laravel models

Detailed explanation of how to set up sub-tables for relationships between Laravel models

藏色散人
Release: 2020-04-10 13:23:32
forward
3155 people have browsed it

Detailed explanation of how to set up sub-tables for relationships between Laravel models

In actual development, sub-databases and tables are often used. For example, the user table is divided into 100 tables. At this time, querying data requires setting up sub-tables. For example, Laravel's Model class provides setTable. Method:

Recommended tutorial: "laravel tutorial"

/**
 * Set the table associated with the model.
 *
 * @param  string  $table
 * @return $this
 */
public function setTable($table)
{
    $this->table = $table;
 
    return $this;
}
Copy after login

Then to add, delete, modify and query the data table, you need to create a new model instance first, and then set the table name. For example:

(new Circle())->setTable("t_group_" . hashID($userid, 20))
->newQuery()
->where('group_id', $request->group_id)
->update($attributes);
Copy after login

This is very simple, so how to set up sub-tables when the relationship between models such as HasOne, HasMany, etc. uses this method?

After searching for a long time, I couldn't find a good way. Taking HasOne as an example, I had to copy the HasOne method in the Model class, change it to myHasOne, pass in the table name, and call setTable after the object is instantiated in the function. Sure enough it can.

The code is as follows:

public function detail()
{
    return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20));
}
 
public function myHasOne($related, $foreignKey = null, $localKey = null, $table)
{
    $foreignKey = $foreignKey ?: $this->getForeignKey();
 
    $instance = (new $related)->setTable($table);
 
    $localKey = $localKey ?: $this->getKeyName();
 
    return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey);
}
Copy after login

I don’t know if you have a more elegant way.

The above is the detailed content of Detailed explanation of how to set up sub-tables for relationships between Laravel models. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template