Я искренне извиняюсь, если на этот вопрос уже был дан ответ, однако я, похоже, не нашел подобной ситуации в другом месте. Если это дубликат, укажите мне правильное направление.
У меня есть три пользовательские таблицы:
> app_expressions;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| expression | varchar(191) | NO | | NULL | |
| bot | int(10) unsigned | NO | MUL | NULL | |
+------------+------------------+------+-----+---------+----------------+
> app_links;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| source | varchar(10) | NO | MUL | NULL | |
| destination | varchar(10) | NO | MUL | NULL | |
| sid | int(10) unsigned | NO | MUL | NULL | |
| did | int(10) unsigned | NO | MUL | NULL | |
| bot | int(10) unsigned | NO | MUL | NULL | |
+-------------+------------------+------+-----+---------+----------------+
> app_replies;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| reply | text | NO | | NULL | |
| bot | int(10) unsigned | NO | MUL | NULL | |
+-------+------------------+------+-----+---------+----------------+
app_expressions
подключен к app_replies
через app_links
Предположим, у меня есть одна запись в каждой таблице.
app_expressions.id
такой же, как в app_links.sid
, где app_links.source = 'expression'
app_replies.id
то же самое, что и в app_links.did
, где app_links.destination = 'reply'
Используя Laravel hasOneThrough()
, как я могу получить доступ к ответу app_expressions
от app_replies
до app_links
с условием app_links.destination = 'reply'
? Псевдокод ниже:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Expressions extends Model
{
/*
* Table
*/
protected $table = 'app_expressions';
/*
* Get all replies linked with this record
*/
public function get_reply()
{
return $this -> hasOneThrough(
'App\Replies',
'App\Links',
'did', // Destination ID
'id',
'id',
'sid' // Source ID
) -> where('intermediary table.destination', '=', 'reply') ;
}
}
Надеюсь, я хорошо это объяснил.