Nếu bạn quan tâm, tôi đang làm việc trên một cái gì đó tương tự. Tôi cũng cần tìm kiếm trong các mô hình có liên quan, vì vậy tôi đang kết hợp dự án Eloquent-joins [có thể thực hiện tham gia thực sự vào mô hình hùng hồn thay vì hệ thống tải háo hức được sử dụng bởi Laravel] với trình điều khiển trinh sát mysql
Cách duy nhất để tìm kiếm trong một mô hình có liên quan là thực hiện một vị trí trên bảng đã nối, sử dụng tên trường đầy đủ [ví dụ:. original_users. tên người dùng]. Tôi đã phải viết lại trình điều khiển mysql trinh sát để tìm kiếm các trường sẽ được sử dụng ngay cả trong mô hình liên quan đã chỉ định và sử dụng hệ thống tham gia trong quá trình truy vấn [và chức năng khác mà tôi cần trong dự án của mình]
Đối với dự án eloquent-joins, tôi đã tạo một nhánh rẽ mà tôi đang cập nhật để hoạt động với Laravel 6 và hệ thống trình điều khiển mới của anh ấy. https. //github. com/mix359/eloquent-joins/tree/dev
Nếu có ai đó quan tâm và tôi có chút thời gian, tôi có thể thử tạo một gói với trình điều khiển được viết lại [cấu trúc khác với gói ban đầu vì nó không được phát triển với ý tưởng xuất bản trong một gói]
Scout Extended biến đổi mô hình của bạn thành các bản ghi Algolia bằng phương pháp
class Article extends Model { use Searchable; /** * Get the indexable data array for the model. * * @return array */ public function toSearchableArray[] { $array = $this->toArray[]; // Applies Scout Extended default transformations: $array = $this->transform[$array]; // Add an extra attribute: $array['added_month'] = substr[$array['created_at'], 0, 7]; return $array; } }8. Bạn có thể ghi đè phương thức này để tùy chỉnh dữ liệu nào bạn muốn lập chỉ mục
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
Để biết thêm về phương pháp
class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
9, hãy kiểm tra phầnCác mối quan hệ
Algolia không thực hiện bất kỳ hoạt động
1
2
3
4
5
6
7
8
9
10
11
0 nào. Tất cả dữ liệu có thể tìm kiếm phải tồn tại trong mỗi bản ghi. Điều này có nghĩa là các mối quan hệ mô hình không được lập chỉ mục theo mặc định. Nếu bạn muốn lập chỉ mục các mối quan hệ trong một bản ghi, bạn cần ghi đè phương thức class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
8 trong mô hình của mình và bao gồm các mối quan hệ bạn muốn lập chỉ mụcThêm thuộc tính từ quan hệ
Ví dụ: nếu bạn đang lập chỉ mục các bài viết và mỗi bài viết có một tác giả, tất cả những gì bạn cần làm là thêm tên đầy đủ hoặc email của bài viết đó
1
2
3
4
5
6
7
8
9
10
11
public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
Nhiều nhiều
Nếu bạn muốn lập chỉ mục toàn bộ mối quan hệ, bạn có thể thực hiện bằng cách tải chúng trước khi gọi phương thức
1
2
3
4
5
6
7
8
9
10
11
2Đối tượng kết quả có các danh mục, được Laravel chuyển đổi thành một mảng
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
0Có thể là không phải tất cả dữ liệu từ mối quan hệ. Để xóa dữ liệu, bạn có thể làm một cái gì đó như thế này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2Hãy nhớ rằng Algolia có giới hạn kích thước cho mỗi bản ghi, vì vậy bạn chỉ nên lập chỉ mục cho dữ liệu mình cần
Cập nhật quan hệ khi cha/con thay đổi
Khi bạn nhúng thông tin từ một mối quan hệ vào hồ sơ của mình, bạn có thể muốn cập nhật chúng khi bạn thay đổi mối quan hệ
Tùy thuộc vào loại mối quan hệ giữa các mô hình của bạn, bạn có hai giải pháp. sử dụng thuộc tính
1
2
3
4
5
6
7
8
9
10
11
3 và lắng nghe sự kiện 1
2
3
4
5
6
7
8
9
10
11
4Sử dụng thuộc tính 1
2
3
4
5
6
7
8
9
10
11
3
Laravel phải cho mối quan hệ cha mẹ biết rằng một trong những đứa con của họ đã thay đổi
In a typical Article Comment example, all you would need to do is add
1
2
3
4
5
6
7
8
9
10
11
6 to the 1
2
3
4
5
6
7
8
9
10
11
3 property.1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
9Phương pháp này chỉ hoạt động với các mối quan hệ
1
2
3
4
5
6
7
8
9
10
11
8 và 1
2
3
4
5
6
7
8
9
10
11
9Lắng nghe sự kiện 1
2
3
4
5
6
7
8
9
10
11
4
Nếu bạn sử dụng bất kỳ mối quan hệ nào khác, bạn phải lắng nghe sự kiện
1
2
3
4
5
6
7
8
9
10
11
4 và kích hoạt việc lập chỉ mụcclass Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
0class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
1
Máy biến áp
Một số phương thức xây dựng như
public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
2 và public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
3 yêu cầu các giá trị số. Vì lý do này, nếu class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
8 không được xác định, theo mặc định, Scout Extended sẽ biến đổi- Ngày thành
public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
5 - Chuỗi số thành
public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
6 hoặc public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
7
Như thường lệ, bạn có thể ghi đè hành vi này bằng cách triển khai phương thức
class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
81
2
3
4
5
6
7
8
9
10
11
class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
3Viết máy biến áp tùy chỉnh
Một trong những lợi ích chính của việc tạo lớp
public function toSearchableArray[]
{
$array = $this->toArray[];
$array = $this->transform[$array];
$array['author_name'] = $this->author->name;
$array['author_email'] = $this->author->email;
return $array;
}
9 là khả năng gõ gợi ý bất kỳ phụ thuộc nào mà máy biến áp của bạn có thể cần trong hàm tạo của nó. Các phụ thuộc đã khai báo sẽ tự động được giải quyết và đưa vào phiên bản máy biến ápĐể viết một máy biến áp, bạn cần tạo một lớp mới triển khai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
0. Phương thức class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
9 sẽ biến đổi 1
2
3
4
5
6
7
8
9
10
11
12
13
14
2 đã cho khi cầnclass Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
4class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
5Cuối cùng, áp dụng một biến đổi tùy chỉnh gửi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3 vào phương thức class Article extends Model
{
use Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray[]
{
$array = $this->toArray[];
// Applies Scout Extended default transformations:
$array = $this->transform[$array];
// Add an extra attribute:
$array['added_month'] = substr[$array['created_at'], 0, 7];
return $array;
}
}
9 và chỉ định các máy biến áp để áp dụng