【发布时间】:2021-06-24 08:12:52
【问题描述】:
我是 Laravel 的新手,但遇到了一个非常奇怪的问题。
我成功地为 6 个表创建了模型和迁移以处理多对多关系。其中一个关系工作正常,我可以通过路由检索数据。然而,另一个只返回一个白屏(没有错误,没有任何东西)。网络选项卡响应说:“此请求没有可用的响应数据” - 但我已经三次检查数据库并搜索不同的记录,但它从未返回任何结果。
我使信息尽可能简单,并遵循所有命名约定。
知道这里发生了什么吗?是不是配置有问题?请帮助我不要发疯 - 我已经尝试了大量的代码迭代,但似乎没有任何工作可以建立多对多的客户端/网络关系。
非工作关系
客户表:
+----------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| client_name | varchar(255) | NO | | NULL | |
| client_type_id | bigint unsigned | YES | | NULL | |
| address | varchar(255) | YES | | NULL | |
| address_2 | varchar(255) | YES | | NULL | |
| city | varchar(255) | YES | | NULL | |
| state | varchar(255) | YES | | NULL | |
| zip_code | varchar(255) | YES | | NULL | |
| country | varchar(255) | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+----------------+-----------------+------+-----+---------+----------------+
网络表:
+--------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| network_name | varchar(255) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+--------------+-----------------+------+-----+---------+----------------+
client_network 表:
+------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| client_id | bigint unsigned | NO | | NULL | |
| network_id | bigint unsigned | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+-----------------+------+-----+---------+----------------+
客户端模型:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
{
use HasFactory;
public function networks()
{
return $this->belongsToMany(Network::class);
}
}
网络模型:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Network extends Model
{
use HasFactory;
public function clients()
{
return $this->belongsToMany(Client::class);
}
}
路线:
Route::get('/testclient', function() {
$network = Client::find(1)->network_name;
return $network;
});
【问题讨论】:
-
您好!只是为了确保,一个帖子属于许多 cmets?我会按照维基所说的那样做,一对多(和反向)关系,这样一个帖子就有很多 cmets,很多 cmets 可以属于一个帖子! laravel.com/docs/8.x/eloquent-relationships#one-to-many
-
如果你尝试这样:$network = Client::find(1);返回 $network->client();
-
@Prospero 引发“错误方法”错误。加上帖子/评论关系的其他模型/方法工作正常。
-
个人推荐,不要命名单数,什么是多资源。如果您的
clients可以有多个networks,反之亦然,请不要将关系命名为client()和network(),因为它们将返回collection,但如果您将它们读为单数,您希望得到一个改为模型...您也可以dd(Client::find(1)->network);并分享结果。 -
@matiaslauriti 拍摄...我还差 2 个声望点来支持您的评论。一旦我到达那里,我会的。同时,我会添加答案。再次感谢!
标签: php mysql laravel many-to-many laravel-8