Laravel 8 多对多关系无效(未抛出错误)
Laravel 8 Many to Many relationship not working (no errors being thrown)
我是 Laravel 的新手,但遇到了一个非常奇怪的问题。
我成功创建了 6 table 的模型和迁移以处理多对多关系。其中一个关系工作正常,我可以通过路由检索数据。然而,另一个只有 returns 一个白屏(没有错误,什么都没有)。网络选项卡响应说:“此请求没有可用的响应数据”- 但我已经三次检查数据库并搜索不同的记录,但它从来没有 returns 任何结果。
我已使信息尽可能简单并遵循所有命名约定。
知道这里发生了什么吗?是不是配置有问题?请帮助我不要发疯 - 我已经尝试了大量的代码迭代,但似乎无法建立多对多 client/network 关系。
没有工作关系
客户table:
+----------------+-----------------+------+-----+---------+----------------+
| 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 | |
+----------------+-----------------+------+-----+---------+----------------+
网络table:
+--------------+-----------------+------+-----+---------+----------------+
| 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 table:
+------------+-----------------+------+-----+---------+----------------+
| 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;
});
你打错了,改一下
Route::get('/testclient', function() {
$network = Client::find(1)->network;
return $network;
});
至
Route::get('/testclient', function() {
$network = Client::find(1)->networks; //Add s
return $network;
});
对于处理类似问题的任何人来说,这种情况下的问题不是关系,而是从关系中提取数据的路由。
不工作路线
Route::get('/testclient', function() {
$network = Client::find(1)->network_name;
return $network;
});
工作路线
Route::get('/testing', function(){
$networks = Client::find(1)->networks;
foreach($networks as $network){
$network_arr[] = $network->network_name;
}
return $network_arr;
为了解决这个问题,评论中建议的代码有助于显示数据确实是从关系中提取的,但显示不正确。
帮助代码:
dd(Network::find(1)->clients);
我是 Laravel 的新手,但遇到了一个非常奇怪的问题。
我成功创建了 6 table 的模型和迁移以处理多对多关系。其中一个关系工作正常,我可以通过路由检索数据。然而,另一个只有 returns 一个白屏(没有错误,什么都没有)。网络选项卡响应说:“此请求没有可用的响应数据”- 但我已经三次检查数据库并搜索不同的记录,但它从来没有 returns 任何结果。
我已使信息尽可能简单并遵循所有命名约定。
知道这里发生了什么吗?是不是配置有问题?请帮助我不要发疯 - 我已经尝试了大量的代码迭代,但似乎无法建立多对多 client/network 关系。
没有工作关系
客户table:
+----------------+-----------------+------+-----+---------+----------------+
| 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 | |
+----------------+-----------------+------+-----+---------+----------------+
网络table:
+--------------+-----------------+------+-----+---------+----------------+
| 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 table:
+------------+-----------------+------+-----+---------+----------------+
| 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;
});
你打错了,改一下
Route::get('/testclient', function() {
$network = Client::find(1)->network;
return $network;
});
至
Route::get('/testclient', function() {
$network = Client::find(1)->networks; //Add s
return $network;
});
对于处理类似问题的任何人来说,这种情况下的问题不是关系,而是从关系中提取数据的路由。
不工作路线
Route::get('/testclient', function() {
$network = Client::find(1)->network_name;
return $network;
});
工作路线
Route::get('/testing', function(){
$networks = Client::find(1)->networks;
foreach($networks as $network){
$network_arr[] = $network->network_name;
}
return $network_arr;
为了解决这个问题,评论中建议的代码有助于显示数据确实是从关系中提取的,但显示不正确。
帮助代码:
dd(Network::find(1)->clients);